我遇到了在Android中销毁通知的问题。
我的应用程序在特定时间生成一些通知,并且我希望在一段时间(60秒)后自动删除。
通知由HumanEntity
创建,捕获由BroadcastReceiver
创建的广播,然后从广播的alarmManager
中提取信息并创建通知。
有时候这种方法有效,有时则不然。我认为这是因为android终止某些进程或类似的东西,但我在网上找不到任何东西。
这是我的代码片段:
intent
请注意Notification notification = mBuilder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE;
notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS;
final NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(notificationId,notification);
Log.d("AlarmReveiver","id della notifica: " + String.valueOf(notificationId));
//cancella la notifica quando l'orario è passato
Handler handler = new Handler();
long delay = 60*1000;
final int lullo = notificationId;
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d("Handler","id della notifica: " + String.valueOf(lullo));
notificationManager.cancel(lullo);
}
},delay);
notificationId++;
是notificationId
;我猜我可以使用静态变量来创建到目前为止通知的数量,以避免混淆通知ID,但我看到这个计数器在一段时间后重新初始化为0.
有没有人知道一种更好的方法(一种每次都适用的方式)?
提前致谢
答案 0 :(得分:2)
您无法假设应用仍然是常驻应用。你绝对不能指望应用程序保持足够长的时间让处理程序处理你的消息。这意味着在任何两次调用BroadcastReceiver之间,它可能会丢失所有静态。而是使用处理程序,使用AlarmManager警报并将if取消放入意图中。
顺便说一句,我碰巧今天发布了我的Timer类,简化了警报的处理。查看http://gabesechansoftware.com/timers-in-android/