2013-03-22 8 views
15

Ich habe durch Stackoverflow gestöbert und habe gesehen, dass diese Frage gestellt wurde, aber ich habe keine Lösung gefunden.Wie schließe ich die Statusleiste/Benachrichtigung Panel nach der Benachrichtigung Schaltfläche klicken

Ich habe eine benutzerdefinierte Benachrichtigung mit 2 Tasten. Ich möchte, dass das Statusleistenfenster geschlossen wird, nachdem ich auf diese Benachrichtigung geklickt habe, aber ich weiß nicht wie. Wenn ich die Benachrichtigung selbst drücke (also den contentIntent), schließt sich das Panel, was ich auch für meine Buttons möchte.

Hier ist mein Benachrichtigungscode:

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 Buttons werden als der API-Ebene unterstützt 11. Sie auf meiner jetzt-deleted Antwort in Ihrem Kommentar darauf hingewiesen, dass dies Ihr 'minSdkVersion' ist, und Sie so sollte in Ordnung sein, obwohl ich keine Ahnung habe, wie man die Schublade schließt. Ich entschuldige mich für meinen Fehler - ich hatte vergessen, dass sie das offiziell unterstützt haben. – CommonsWare

+0

Np, vielleicht hätte ich vorher erwähnen sollen, dass meine minSdkVersion = 11 ;-) –

Antwort

1

Ok ich die Lösung gefunden habe. Es ist nicht öffentliche API, aber es funktioniert (im Moment):

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

Dazu

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

zum Arbeiten benötigt wird

+0

was ist hier c? Und was wird dieser Code tun? –

+0

@iDroidExplorer: c ist der Kontext. Und wie in meiner Frage gefragt, kann dieser Code das erweiterte Benachrichtigungsleistenfenster schließen. Ich benutze das Stück Code, nachdem ich eine Taste meiner benutzerdefinierten Benachrichtigung drücken –

+1

Komplette Antwort http://stackoverflow.com/a/16978341/506724 – falko

74

Verwenden Sie die folgenden zwei Codezeile die Benachrichtigungsleiste auszublenden.

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

Dies ist die richtige Antwort, weil dieser Code ohne private API funktioniert. – CeccoCQ

+0

hast du meine Zeit gerettet. Vielen Dank. – BSKANIA

+2

Dies sollte als Antwort markiert werden. – prince

Verwandte Themen