是否有类似iOS'的等效解决方案;Android平台上的localNotification?

是否有类似iOS'的等效解决方案;Android平台上的localNotification?,android,ios,notifications,alarmmanager,uilocalnotification,Android,Ios,Notifications,Alarmmanager,Uilocalnotification,我的应用程序需要在未来的特定时间(可能几个月后)向用户显示通知。在iOS中,我需要做的就是: UILocalNotification* localNotification = [[UILocalNotificationalloc] init]; localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:60]; localNotification.alertBody = @"Your alert message"; lo

我的应用程序需要在未来的特定时间(可能几个月后)向用户显示通知。在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上的本地通知问题有没有无痛的解决方案

    如果在警报触发前重启设备,则警报将丢失。 我可以像这样注册启动广播并重新安装 服务。但是,我确实希望避免安装重复的报警 对于同一事件,但目前似乎没有办法 是否从报警管理器安装了报警

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

    通知将在将来的计划时间(例如 一个月后),而不是在我设置通知时(现在)。当时, 通知所需的数据可能不再可用。我不 除了存储相关数据外,请查看其他解决方法,然后等待 让警报响起

    这是正确的,您需要存储要在通知中显示的数据,
    SharedReferences
    可能是最简单的方法

    编辑:

    您不需要保留对挂起的意图的引用,您所要做的就是以与示例相同的方式创建意图

    当您第一次创建报警时,您使用了此意图

    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);
    

    我不认为还有其他方法,但请参考此帮助将数据写入文件的哪一部分构成“痛苦”?与iOS代码片段相比,您是否同意安卓方式是痛苦的?哇,作为一名即将来到安卓的iOS开发人员,这对我来说是惊人的。每次设备启动时,我都必须重新注册所有警报…这太疯狂了。回答您的问题:我可以使用a服务在启动时安装所有警报,但在新事件准备就绪(无需重新启动)时调用同一服务,在这种情况下,旧事件安装了两次。没有像getCurrentAlarms()这样的方法吗?用户可能需要取消以前设置的一个报警,他怎么做?不,没有办法获得所有待处理的意图,您是否查看了如何取消报警?如果你所有的报警创建都是在一个点上完成的,只需使用你创建报警的相同意图来取消那里的任何报警,我知道取消(PendingEvent操作)API。但警报设置后可能需要取消一段时间(决定在计划后一周内不旅行),我不能保留挂起的帐篷的参考资料,可以吗?我没有仔细阅读文档。API使用filterEquals(意图其他)进行比较,而不是引用。谢谢