0

我寫了下面的方法來檢查的通知是活動的(可見狀態欄上):的PendingIntent支左右通知駁回後

public static boolean isNotificationActive(Context context, int id) { 
    Intent intentPopup = new Intent(context, PopupActivity.class); 
    PendingIntent test = PendingIntent.getActivity(context, id, intentPopup, PendingIntent.FLAG_NO_CREATE); 
    return test != null; 
} 

我創建的PendingIntent酷似一個我想檢查(同樣的'intentPopup'和'id'被傳遞給這個PendingIntent),並且由於FLAG_NO_CREATE,如果它尚不存在,我預計這個PendingIntent爲null。我在多年前在這裏發表的一篇帖子中讀到了這種方法。

如果通知尚未發出,則該方法返回期望值(false)。當通知發出並處於狀態欄時,該方法返回true。

但是,在我關閉通知後,該方法仍然返回true,就好像PendingIntent仍然存在。

我在這裏錯過了什麼? PendingIntent仍然可用或者我誤解了某些內容?

有沒有更好的方法來檢查一個特定的通知是否處於活動狀態(顯示在狀態欄中)?

編輯:這裏是一個創建的通知代碼:

Intent intentPopup = new Intent(context, PopupActivity.class); 
      intentPopup.putExtra("id", id); 
      intentPopup.putExtra("timeQ", timeQ); 

    PendingIntent pendingIntentPopup = PendingIntent.getActivity(context, id, intentPopup, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
        .setContentIntent(pendingIntentPopup) 
        .setSmallIcon(R.drawable.q_notification_icon) 
        .setContent(contentView) 
        .setSound(Uri.parse("android.resource://" + context.getPackageName() + "/raw/notification_sound")) 
        .setVibrate(vibrate_pattern); 

      Notification notification = mBuilder.build(); 
      notification.flags |= Notification.FLAG_NO_CLEAR; 
      NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(id, notification); 
+0

發佈您用於創建'Notification'的代碼 –

+0

@DavidWasser發佈。 –

回答

1

不幸的是PendingIntent是你們等在Notification嵌入當Notification被駁回,查看或取消不會自動消失。您不能使用PendingIntent(如您所做的那樣使用PendingIntent.FLAG_NO_CREATE)來確定Notification是否處於活動狀態。

要確定Notification是否處於活動狀態,您可以撥打NotificationManager.getActiveNotifications()。這將返回您應用發佈的所有活動Notification

+0

我明白了。不幸的是,getActiveNotifications()是在API 23中引入的,我的應用程序的minsdk是19 ...感謝@DavidWasser。我會繼續尋找替代品。 –

+1

另一種選擇是使用'NotificationListenerService'。這是在API 18中引入的,因此您可以使用它。這有點複雜,但應該給你你想要的。有一個方法'getActiveNotifications()'。 –