2013-10-17 10 views
5

Come posso chiudere la barra di stato dopo aver fatto clic sul pulsante di notifica?Chiudi barra di stato quando si fa clic sulla notifica del pulsante

ho provato this, ma ho avuto un'eccezione:

java.lang.NoSuchMethodException: collapse [] 
    at java.lang.Class.getConstructorOrMethod(Class.java:460) 
    at java.lang.Class.getMethod(Class.java:915) 
    ... 

Il mio codice:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
    .setSmallIcon(R.drawable.icon) 
    .setContentTitle("Sync Failed") 
    .setContentText("Lorem ipsum dolor sit amet") 
    .setStyle(new NotificationCompat.BigTextStyle().bigText("Lorem ipsum dolor sit amet")) 
    .addAction(R.drawable.change, "Change Pass", pChangePass) 
    .addAction(R.drawable.remove, "Ignore", pIgnore) 
    .setAutoCancel(false); 
mNotificationManager.notify(accountUnique, builder.build()); 

Alla classe NotificationIntent

@Override 
public void onReceive(Context context, Intent intent) { 
    int notificationID = intent.getExtras().getInt("NOT_ID"); 
    this.callbackContext = StatusBarNotification.getCallback(); 
    this.mNotificationManager = StatusBarNotification.getNotificationManager(); 

    this.mNotificationManager.cancel(notificationID); 
    this.callbackContext.success(returnJSON(intent)); 
} 

risposta

0

Ok, ho risolto.

private int currentApiVersion = android.os.Build.VERSION.SDK_INT; 
... 

Object sbservice = context.getSystemService("statusbar"); 
try { 
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
    if (currentApiVersion <= 16) { 
     Method collapse = statusbarManager.getMethod("collapse"); 
     collapse.invoke(sbservice); 
    } else { 
     Method collapse2 = statusbarManager.getMethod("collapsePanels"); 
     collapse2.invoke(sbservice); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+4

Si dovrebbe accettare il commento di Sam Lu - le tue soluzioni potrebbero smettere di funzionare su tutte le prossime versioni, perché utilizza non pubblico api. Come vedi, alredy ha dovuto aggiungere "if api <= 16' - è possibile che presto sia necessario aggiungere" if api <= 19' – imbryk

+0

Concordato con il commento sopra. La risposta di Sam è molto più semplice e non si occupa dei numeri di versione. – Saik

30

la seguente soluzione dovrebbe essere più semplice e non API non pubbliche usati:

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

Puoi dire dove usare questo, in onRecieve o in azione? – Ajeet

+0

Funziona come un incantesimo! Grazie. Basta inserire 2 code line in onRecieve. –

+0

Sì, questo ha funzionato. Grazie. – Saik

Problemi correlati