2012-07-04 45 views
4

要在Android的動態拖累通知區域,唯一的解決辦法是這樣的爲什麼我無法直接找到對StatusBarManager類的引用?

Object sbservice = getSystemService("statusbar"); 
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
    Method showsb = statusbarManager.getMethod("expand"); 
    showsb.invoke(sbservice); 

這個奇妙的作品,但爲什麼與反射亂七八糟嗎?爲什麼我無法直接找到對StatusBarManager類的引用?爲什麼Context類中的「statusbar」服務沒有常量?

回答

12

爲什麼有反射的壞習慣?

因爲它不是Android SDK的一部分。只有對創建不可靠應用感興趣的人才會嘗試與Android源代碼本身之外的StatusBarManager進行交互,因爲歡迎核心Android團隊和設備製造商隨時隨地更改SDK外部的任何內容。

爲什麼我無法直接找到對StatusBarManager類的引用?

因爲它不是Android SDK的一部分。有在Android框架類了大量的類和方法上都標有@hide註釋,對各種原因:不願「默默無聞安全」承諾無限期地支持該API,等

爲什麼在「狀態欄」服務的Context類中沒有常量嗎?

因爲它不是Android SDK的一部分。當然歡迎您爲AOSP提供補丁,使StatusBarManager被「提升」到與其他系統服務相同的狀態(例如,LocationManager,NotificationManager)。如果StatusBarManager的情況僅僅是在〜2007年創建SDK之後的疏忽,那麼您的補丁程序可能會被接受,並且您會看到即將發佈的Android版本中的更改。

相關問題