我到處搜索過,但無法在SDK或Google上找到關於如何執行此操作的任何內容。我知道這是可能的,因爲所有的自定義發射器都可以通過按鈕按鈕(LauncherPro,ADW等)來完成。如何以編程方式在Android中打開/關閉通知?
謝謝。
我到處搜索過,但無法在SDK或Google上找到關於如何執行此操作的任何內容。我知道這是可能的,因爲所有的自定義發射器都可以通過按鈕按鈕(LauncherPro,ADW等)來完成。如何以編程方式在Android中打開/關閉通知?
謝謝。
的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的一部分,所以這不能保證在今後的工作中,很多人會建議對這樣做。
下面是從Android的Launcher
的showNotifications方法:
private void showNotifications() {
final StatusBarManager statusBar = (StatusBarManager) getSystemService(STATUS_BAR_SERVICE);
if (statusBar != null) {
statusBar.expand();
}
}
(其中,因爲羅比表示,是 「狀態欄」 系統服務)。
這不是Android SDK的一部分。 – CommonsWare 2011-02-17 14:24:28
這不起作用,因爲公共API – user496854 2011-02-17 15:26:43
中沒有StatusBarManager類。 CommonsWare是對的;我只是在瀏覽源代碼而不是相關的SDK,對不起。 – 2011-02-17 15:39:09
如何以編程方式在Android中打開/關閉通知?
你想要的東西無法使用Android SDK完成。
我知道這是可能的,因爲所有的cuustome發射器都可以通過按鈕按鈕(LauncherPro,ADW等)來完成。
所有的「自定義啓動程序」都繞過了SDK,使用@Yoni Samlan在其他問題的答案中提出的技術變體。不屬於SDK的東西可以由設備製造商移除,由未來版本的核心Android團隊取代等。
我會爭辯說,你想要什麼應該可以通過SDK;否則,它確實限制了其他主屏幕實現。然而,你和我想要什麼都不算太多。
是的,你可以添加以下代碼到你需要的地方執行
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" />
你可以編程方式關閉通知抽屜通過廣播ACTION_CLOSE_SYSTEM_DIALOGS
意圖。
這會導致「臨時系統對話框」被解除。從文檔:
臨時系統對話框的一些示例是通知窗口陰影和最近的任務對話框。
這不需要任何權限,並且自從Android 1.0以來顯然已經可用。
下面的代碼對我的作品上運行Android 5.0的Nexus 4:
Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(closeIntent);
不getSystemService( 「狀態欄」)返回一個對象? – 2011-02-17 14:04:09
是的,它的確如此。但是我不能將它映射到StatusBarManager,因爲它不是公共API的一部分。所以,現在我只是把它當作「Object」類型。我可以做些什麼來使其可用? – user496854 2011-02-17 15:25:42