2013-10-17 26 views
5

Bildirim çubuğu tıklandıktan sonra durum çubuğunu nasıl kapatabilirim? Düğme bildirimi tıklandığında durum çubuğunun kapatılması

Ben this çalıştı, ancak bir istisna vardı:

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

Benim kod:

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()); 

@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)); 
} 

cevap

0

Tamam NotificationIntent sınıfında, ben onu çözdüm.

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

Gerçekten Sam Lu'nun Comment kabul etmelidir - çözümlerinizi herhangi sonraki sürümlerinde çalışması durabilir, bu sigara kullanması nedeniyle kamu api. Gördüğünüz gibi, 'api <= 16' - eklemeniz gerekiyordu - eğer' api <= 19' – imbryk

+0

Yukarıdaki yorumu kabul ettiyseniz, eklemeniz gerekecek. Sam'in cevabı çok daha basit ve versiyon numaraları ile ilgilenmiyor. – Saik

30

şu çözüm daha basit ve hiç olmayan kamu API'ler kullanılan olmalıdır:

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

OnCelik veya eylem amacı içinde bunun nerede kullanılacağını söyleyebilir misiniz? – Ajeet

+0

Çekicilik gibi çalışın! Teşekkürler. Sadece 2 kod satırı inRecieve'a yerleştirin. –

+0

Evet, işe yaradı. Teşekkürler. – Saik

İlgili konular