我的应用需要在将来某个特定时间向用户显示通知(可能需要几个月的时间)。在iOS中,我需要做的就是:
UILocalNotification* localNotification = [[UILocalNotificationalloc] init];
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:60];
localNotification.alertBody = @"Your alert message";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
然而,在Android中,它比我原先预期的要复杂得多:
我必须使用Alarm Manager安装闹钟,以便在将来的每个指定时间启动服务。
这些服务反过来创建通知,并使用通知管理器将通知推送到状态栏等。
但是这个解决方案存在问题:
Android上的本地通知问题是否有一个无痛的解决方案?
答案 0 :(得分:6)
如果在警报触发前重启设备,则警报会丢失。 我可以注册这样的启动广播并重新安装 服务。但是,我真的想避免安装重复的警报 对于同一事件,但似乎目前无法获得 从Alarm Manager安装了警报?
重启设备后,您将如何获得重复警报?当设备重新启动时,所有警报都会被取消,因此您可以按照说明在设备启动时BroadcastReceiver
中再次启动它的位置
通知是在未来的预定时间组成的(例如a 一个月后),而不是我设置通知(现在)。那时候, 通知所需的数据可能不再可用。我不 除了存储相关数据外,还要等待 警报开火。
这是正确的,您需要存储要在通知中显示的数据,SharedPreferences
可能是最简单的
修改强>
您不需要保留对待处理意图的引用所有您需要做的就是以相同的方式创建意图示例
当您第一次创建警报时,您使用了此意图
Intent intent = new Intent(context,MyClass.class);
//any flags or extras
PendingIntent.getBroadcast(context, 0, intent, 0);
现在您要取消该警报,以便再次创建相同的意图,它必须是1对1的原始
Intent intent = new Intent(context,MyClass.class);
//any flags or extras that you previously had
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmMgr.cancel(pi);