2013-03-22 12 views
15

Przeglądałem Stackoverflow i widziałem, że to pytanie zostało zadane, ale nie znalazłem żadnego rozwiązania.Jak zamknąć pasek stanu/panel powiadomień po kliknięciu przycisku powiadomienia

Mam niestandardowe powiadomienie za pomocą 2 przycisków. Chcę zamknąć panel paska stanu po naciśnięciu przycisku tego powiadomienia, ale nie wiem jak. Jeśli naciśniesz samo powiadomienie (a więc contentIntent), panel zamknie się, co jest również tym, czego chcę dla moich przycisków.

Oto mój kod powiadomienie:

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 Przyciski są obsługiwane jako API Level 11. Ty wskazany w swoim komentarzu do mojego teraz-usunięty odpowiedź, że jest to 'minSdkVersion', a więc powinno być OK, chociaż nie mam pojęcia, jak zamknąć szufladę. Przepraszam za mój błąd - zapomniałem, że oficjalnie zaczęli to wspierać. – CommonsWare

+0

Np, może powinienem wspomnieć z góry, że mój minSdkVersion = 11 ;-) –

Odpowiedz

1

Ok znalazłem rozwiązanie. To nie jest API publicznych, ale działa (na razie):

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

Aby to działało

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

jest potrzebne

+0

co jest tutaj? A co ten kod zrobi? –

+0

@iDroidExplorer: c to Kontekst. I, na pytanie w moim pytaniu, ten kod jest w stanie zamknąć rozszerzony panel paska powiadomień. Używam tego fragmentu kodu po naciśnięciu przycisku mojego niestandardowego powiadomienia. –

+1

Bardziej kompletna odpowiedź http://stackoverflow.com/a/16978341/506724 – falko

74

Poniższa linię dwa kodu aby zwinąć pasek powiadomień.

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

To jest odpowiednia odpowiedź, ponieważ ten kod działa bez prywatnego interfejsu API. – CeccoCQ

+0

zaoszczędzisz mój czas. Dzięki. – BSKANIA

+2

To powinno być oznaczone jako odpowiedź .... – prince

Powiązane problemy