2012-07-28 129 views
5

这很混乱。我看的是Android 2.2.2_r1 source code for the NotificationManager类,我看到的方法getService()定义为publicstatic。但是,日食是告诉我:不能使用公共静态方法?

的方法GetService()是未定义的类型NotificationManager 上线

Object o = NotificationManager.getService(); 

我的项目是建设针对的Android 2.2/API级别8.我尝试使用反射来看看方法名称和改性剂,果然,我回到

public static getService

我在这里错过了什么吗?为什么日食会告诉我这种方法不存在?

回答

5

你会在this post找到一个非常详细的答案。

简而言之:因为您编译的是android.jar,它具有所有隐藏方法(如您试图访问的方法)已被删除。他们只会在运行时出现,以供内部android使用。


但是既然你也许也需要它。访问NotificationManager正确的方法是通过上下文的getSystemService方法:

NotificationManager nm = (NotificationManager)ctx.getSystemService(Context.NOTIFICATION_SERVICE); 

随着context是一个有效的上下文(如当前的活动)。

+0

这很有趣,我正在阅读那篇文章,回来后发现你已经发布了它作为答案。实际上,我试图找到一种可以让我获取通知列表的黑客技能,因此获取通知管理器的正常方式并非我所需。 – you786 2012-07-28 21:13:37

+0

对不起。我不明白为什么正常的方式不适合你?这个方法返回的'NotificationManager'和'getService'返回的一样。 – 2012-07-28 21:18:31

+0

@ you786 - 自发地我会说你不能通过这种方式找到一个列表 - 至少不是通过'NotificationManager' API这是'NotificationManager'在内部用来与'NotificationManagerService'对话的内容。 – Jens 2012-07-28 21:49:52