2013-03-22 54 views
15

我瀏覽過Stackoverflow並看到這個問題已被詢問,但我沒有找到任何解決方案。如何在通知按鈕點擊後關閉狀態欄/通知面板

我有2個按鈕的自定義通知。我想按下該通知上的按鈕後關閉狀態欄面板,但不知道如何。如果我按通知本身(所以contentIntent),然後面板關閉,這也是我想要的按鈕。

這裏是我的通知碼:

Notification notification = new Notification(R.drawable.icon, "Service running", System.currentTimeMillis()); 
notification.flags |= Notification.FLAG_ONGOING_EVENT; 
notification.contentIntent = openIntent; 
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_layout); 


contentView.setOnClickPendingIntent(R.id.button1, stopIntent); 
contentView.setOnClickPendingIntent(R.id.button2, addIntent); 

notification.contentView = contentView; 

notificationManager.notify(NOTIFICATION_ID, notification); 
+0

http://stackoverflow.com/a/6435373/115145按鈕的支持,這是你的'minSdkVersion',等你應該沒問題,但我不知道如何關閉抽屜。我對我的錯誤表示歉意 - 我忘記了他們正式開始支持這一點。 – CommonsWare 2013-03-22 13:03:10

+0

Np,也許我應該提前一點說我的minSdkVersion = 11 ;-) – 2013-03-22 13:17:30

回答

1

好,我找到了解決辦法。這不是公共的API,但它的作品(目前):

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

對於這個工作

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

需要

+0

這裏的c是什麼?這個代碼會做什麼? – 2013-06-04 12:22:14

+0

@iDroidExplorer:c是上下文。而且,正如我的問題所問,這段代碼能夠關閉擴展的通知欄面板。我使用這段代碼後,我按了我的自定義通知按鈕 – 2013-06-04 13:17:08

+1

更完整的答案http://stackoverflow.com/a/16978341/506724 – falko 2015-07-23 21:26:36

74

使用下面的兩個代碼行崩潰通知欄。作爲API級別11.你在我現在刪除的回答您的評論指出

Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
context.sendBroadcast(it); 
+1

這是正確的答案,因爲此代碼無私有API的工作。 – CeccoCQ 2014-08-21 07:56:26

+0

你節省了我的時間。謝謝。 – BSKANIA 2014-11-19 12:44:35

+2

這應該被標記爲答案.... – prince 2014-11-21 09:10:48