如何查看哪些通知在Android Dev的状态栏中处于活动状态?

我做了一个应用程序,在Android手机的下拉状态栏中设置通知。 但是,我的代码中有一个错误(有时通知设置,有时不是)。 如果通知可见于用户,我希望能够检查(在代码中)。 (即用户能看到状态栏中的通知?)。

我该怎么做? (提前致谢)。

示例代码非常感谢。

如果通知可见于用户,我希望能够检查(在代码中)。 (即用户能看到状态栏中的通知?)。

我该怎么做?

你不能,对不起。 更新:现在可能与Android 4.3 + http://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getActiveNotifications()

但是,您可以随时cancel()它 – 取消不在屏幕上的Notification是完全正常的。 相反,您可以再次安全地为相同的Notification调用notify() ,如果Notification已经在屏幕上,也不会导致问题。

编辑:

NotificationManager.getActiveNotifications()在API 23中添加,如果您不想使用NotificationListenerService

您需要为每个通知设置一个ID。

所以你通知..

 PendingIntent pendingIntent = PendingIntent.getBroadcast(this, notId + selectedPosition, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, rightNow.getTimeInMillis() - offset, pendingIntent); Notification notification = new Notification(R.drawable.icon, "TVGuide Υπενθύμιση", System.currentTimeMillis()); NotificationManager manger = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notification.setLatestEventInfo(context, "Κανάλι: " + b.getString("channel"), "Εκπομπή: " + showname, pendingIntent); manger.notify(notId, notification); 

清除它..

 PendingIntent pendingIntent = PendingIntent.getBroadcast(context,notId, intent, 0); pendingIntent.cancel(); 

并检查是否有效..(existsAlarm返回null如果没有未决意图可用)

  public PendingIntent existAlarm(int id) { Intent intent = new Intent(this, alarmreceiver.class); intent.setAction(Intent.ACTION_VIEW); PendingIntent test = PendingIntent.getBroadcast(this, id + selectedPosition, intent, PendingIntent.FLAG_NO_CREATE); return test; } 

所以一切都归结为初始化每个通知的ID和如何使它独特。

把所有的东西放在一起。 这是如何工作的

要build立通知,

  Notification n = new Notification.Builder(MyService.this) .setContentTitle("Notification Title") .setContentText("Notification Message") .setSmallIcon(R.drawable.myicon).build(); 

要通知声音调用通知的setSound()

  Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Notification n = new Notification.Builder(MyService.this) .setContentTitle("Notification Title") .setContentText("Notification Message") .setSound(alarmSound) .setSmallIcon(R.drawable.myicon).build(); 

要在用户select并启动接收方Intent后取消通知,请setAutoCancel()

  Notification n = new Notification.Builder(MyService.this) .setContentTitle("Notification Title") .setContentText("Notification Message") .setSound(alarmSound) .setAutoCancel(true) .setSmallIcon(R.drawable.myicon).build(); 

要为特定的通知只发出一次声音/振动,请使用Notification.FLAG_ONLY_ALERT_ONCE 。 有了这个标志,你的通知将只发出一次声音,直到它被取消,你可以多次调用notify()来获得通知ID。 请注意,如果您调用cancel()或者用户取消通知或自动取消,notify()调用将使通知再次响起。

  n.flags |= Notification.FLAG_ONLY_ALERT_ONCE; // Dont vibrate or make notification sound 

最后把通知放在通知面板上,

  NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(notification_id, n); 

请注意,如果您想要有效地使用通知,那么notification_id很重要(保持通知的单个声音/振动或取消特定的通知)。

要取消特定的通知,

  NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.cancel(notification_id); 

即使通知不存在,也可以cancel()通知,或者可以使用相同的ID多次调用notify() 。 请注意,使用不同的ID调用通知将创build新的通知。

因此,无论通知是否存在,如果使用设置了Notification.FLAG_ONLY_ALERT_ONCE标志的正确notification_id再次调用notify() ,则可以使通知保持活动状态,而不会打扰用户重复的声音。

API 23中的NotificationManager类引入了一个新的方法:

 public StatusBarNotification[] getActiveNotifications() 

有一个标志。

 Notification notification = new Notification(icon, tickerText, when); notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE; 

FLAG_ONLY_ALERT_ONCE:

如果您希望每次发送通知时播放声音和/或振动,即使在此之前还没有取消,也应该设置…。

虽然通知在再次发送时闪烁,但不会有任何声音或振动。

似乎从Android M(API 23)可以得到你的过程,而不使用NotificationListenerService,也不需要额外的权限:

notificationManager.getActiveNotifications()

从Android的棉花糖(API 23),您可以恢复您的应用程序发布的活动通知列表。 这个NotificationManager方法是getActiveNotifications() 。 更多信息在这里: https : //developer.android.com/reference/android/app/NotificationManager.html#getActiveNotifications()