如何查看哪些通知在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()
现在可以检查Android 4.3以上版本的通知了
看这里:
有一个标志。
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()
- Android:app:srcCompat =“”和android:src =“”有什么区别?
- Android Studio中构build和构build的区别
- 如何向用户通知Android应用程序更新?
- strings.xml中的错误:invalid symbol'continue'
- 如何知道我的Android应用程序已升级,以重置警报?
- GoogleAnalyticsTracker.getInstance()时出现NoClassDefFoundError
- 更改单选button的圆形颜色 – Android
- 如何在首次打开应用程序时只启动一次活动?
- 使用Html,Css和JavaScript开发android应用程序