在Android平台上有iOS等localNotification等效解决方案吗?

我的应用需要在将来某个特定时间(可能是数月之后)向用户显示通知.在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安装警报,以便在将来的每个指定时间启动服务.
>这些服务反过来创建通知,并使用通知管理器将通知推送到状态栏等.

但是这个解决方案有问题:

>如果在警报触发前重启设备,则警报将丢失.我可以注册启动广播like this并重新安装服务.但是,我真的想避免为同一事件安装重复的警报,但似乎无法从Alarm Manager获取当前安装的警报?
>通知是在将来的预定时间(比如一个月后)编写的,而不是在我设置通知(现在)时.那时,通知所需的数据可能不再可用.我没有看到任何解决方法,除了存储相关数据,并等待警报触发.

Android上的本地通知问题是否有一个无痛的解决方案?

最佳答案

If the device is restarted before the alarm fires, the alarm is lost.
I can register for boot-up broadcast like this and re-install the
services. However, I really want to avoid installing duplicate alarms
for the same event, but it seems there is no way to get currently
installed alarms from the Alarm Manager?

重启设备后,如何获得重复警报?当设备重新启动时,所有警报都会被取消,因此您可以按照说明在设备启动时在BroadcastReceiver中再次启动它的位置

The notification is composed at the scheduled time in future (say a
month later), not when I set the notification(now). At that time, the
required data for the notification may no longer be available. I don’t
see any way around this, except to store the relevant data, and wait
for the alarm to fire.

这是正确的,您需要存储要在通知中显示的数据,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);

转载注明原文:在Android平台上有iOS等localNotification等效解决方案吗? - 代码日志