2013-03-22 18 views
15

Ho sfogliato Stackoverflow e ho visto che questa domanda è stata richiesta, ma non ho trovato alcuna soluzione.Come chiudere la barra di stato/pannello di notifica dopo il pulsante di notifica fare clic su

Ho una notifica personalizzata con 2 pulsanti. Voglio che il pannello della barra di stato si chiuda dopo aver premuto un pulsante su quella notifica, ma non so come. Se premo la notifica stessa (quindi contentIntent), il pannello si chiude, che è quello che voglio anche per i miei pulsanti.

Ecco il mio codice di notifica:

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

pulsanti http://stackoverflow.com/a/6435373/115145 sono supportati come di API Livello 11. È indicato nel vostro commento sulla mia risposta ormai eliminato che questo è il vostro 'minSdkVersion', e così dovrebbe essere OK, anche se non ho idea di come chiudere il cassetto. Le mie scuse per il mio errore - avevo dimenticato che hanno iniziato ufficialmente a sostenere questo. – CommonsWare

+0

Np, forse avrei dovuto menzionare in anticipo che il mio minSdkVersion = 11 ;-) –

risposta

1

Ok ho trovato la soluzione. Non è API pubblica, ma funziona (per il momento):

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

per questo al lavoro

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

è necessario

+0

cos'è c qui? E cosa farà questo codice? –

+0

@iDroidExplorer: c è il contesto. E, come richiesto nella mia domanda, questo codice è in grado di chiudere il pannello della barra di notifica espansa. Io uso quel pezzo di codice dopo aver premuto un pulsante della mia notifica personalizzata –

+1

Risposta più completa http://stackoverflow.com/a/16978341/506724 – falko

74

utilizzare la seguente riga di codice a due per comprimere la barra di notifica.

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

Questa è la risposta giusta perché questo codice funziona senza API privata. – CeccoCQ

+0

hai salvato il mio tempo. Grazie. – BSKANIA

+2

Dovrebbe essere contrassegnato come risposta .... – prince

Problemi correlati