2011-02-17 108 views
24

我到處搜索過,但無法在SDK或Google上找到關於如何執行此操作的任何內容。我知道這是可能的,因爲所有的自定義發射器都可以通過按鈕按鈕(LauncherPro,ADW等)來完成。如何以編程方式在Android中打開/關閉通知?

謝謝。

+0

不getSystemService( 「狀態欄」)返回一個對象? – 2011-02-17 14:04:09

+0

是的,它的確如此。但是我不能將它映射到StatusBarManager,因爲它不是公共API的一部分。所以,現在我只是把它當作「Object」類型。我可以做些什麼來使其可用? – user496854 2011-02-17 15:25:42

回答

17

answer from Ashwin作品的Android版本低於4.2.2(即低於17版)。在4.2.2中,「expand」方法更改爲「expandNotificationsPanel」。如果您不使用4.2.2及更高版本的方法名稱,您將得到一個空指針異常。因此,代碼應該是:

Object sbservice = getSystemService("statusbar"); 
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
Method showsb; 
if (Build.VERSION.SDK_INT >= 17) { 
    showsb = statusbarManager.getMethod("expandNotificationsPanel"); 
} 
else { 
    showsb = statusbarManager.getMethod("expand"); 
} 
showsb.invoke(sbservice); 

和適當的權限應加AndroidManifest

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 

顯然,這是不公佈的API的一部分,所以這不能保證在今後的工作中,很多人會建議對這樣做。

-1

下面是從Android的Launcher的showNotifications方法:

private void showNotifications() { 
    final StatusBarManager statusBar = (StatusBarManager) getSystemService(STATUS_BAR_SERVICE); 
    if (statusBar != null) { 
     statusBar.expand(); 
    } 
} 

(其中,因爲羅比表示,是 「狀態欄」 系統服務)。

+0

這不是Android SDK的一部分。 – CommonsWare 2011-02-17 14:24:28

+2

這不起作用,因爲公共API – user496854 2011-02-17 15:26:43

+0

中沒有StatusBarManager類。 CommonsWare是對的;我只是在瀏覽源代碼而不是相關的SDK,對不起。 – 2011-02-17 15:39:09

4

如何以編程方式在Android中打開/關閉通知?

你想要的東西無法使用Android SDK完成。

我知道這是可能的,因爲所有的cuustome發射器都可以通過按鈕按鈕(LauncherPro,ADW等)來完成。

所有的「自定義啓動程序」都繞過了SDK,使用@Yoni Samlan在其他問題的答案中提出的技術變體。不屬於SDK的東西可以由設備製造商移除,由未來版本的核心Android團隊取代等。

我會爭辯說,你想要什麼應該可以通過SDK;否則,它確實限制了其他主屏幕實現。然而,你和我想要什麼都不算太多。

14

是的,你可以添加以下代碼到你需要的地方執行

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

並添加此權限

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 
21

你可以編程方式關閉通知抽屜通過廣播ACTION_CLOSE_SYSTEM_DIALOGS意圖。

這會導致「臨時系統對話框」被解除。從文檔:

臨時系統對話框的一些示例是通知窗口陰影和最近的任務對話框。

這不需要任何權限,並且自從Android 1.0以來顯然已經可用。

下面的代碼對我的作品上運行Android 5.0的Nexus 4:

Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
context.sendBroadcast(closeIntent); 
相關問題