2012-07-28 174 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