Android 在何处/如何设置AlarmManager警报以避免重复

Android 在何处/如何设置AlarmManager警报以避免重复,android,alarmmanager,Android,Alarmmanager,我是Android新手,请原谅我的天真 我正在开发的应用程序需要每小时醒来并收集一些背景数据。我正在使用AlarmManager设置启动服务的重复警报 我目前正在onCreate方法的main活动中设置报警。我担心的是,如果关闭并重新打开应用程序,并且再次调用onCreate方法,它会复制警报。我这样假设是不对的吗 我考虑的一种方法是在SharedReferences中使用布尔值。有没有更标准的方法来处理这个问题 谢谢大家! 在onCreate中,我可能会取消所有警报,然后设置一个新警报。Psu

我是Android新手,请原谅我的天真

我正在开发的应用程序需要每小时醒来并收集一些背景数据。我正在使用
AlarmManager
设置启动服务的重复警报

我目前正在
onCreate
方法的
main活动中设置报警。我担心的是,如果关闭并重新打开应用程序,并且再次调用
onCreate
方法,它会复制警报。我这样假设是不对的吗

我考虑的一种方法是在
SharedReferences
中使用布尔值。有没有更标准的方法来处理这个问题


谢谢大家!

在onCreate中,我可能会取消所有警报,然后设置一个新警报。Psuedo代码类似于

  • 为您的报警创建挂起意图
  • 调用AlarmManager。取消带有挂起意图的
  • 将您的警报设置为具有相同的挂起意图

  • 您可以设置报警一次,避免重复,没有任何问题

  • 您可以静态设置广播接收器。通过注册挂起的意图,并在接收方的onReceive()方法中配置AlarmManager

  • 还请注意,每个方法pendingent.getBroadcast()、pendingent.getService()、pendingent.getActivity()或pendingent.getActivities()都有
    标志
    参数。您可以通过设置标志来申请悬挂式帐篷。这意味着,如果系统注册了相同的PendingEvent,则返回null。否则将创建新的PendingEvent实例。因此,您可以依靠此标志检查是否已设置报警

  • 请在我对类似问题的回答中阅读更多关于PendingEvent的内容()

    基本上,您仍然可以在启动活动时通过首先检查您是否已注册PendingEvent来设置警报


    希望您现在了解如何操作。

    我认为用户应该可以选择设置报警,而不是使用onCreate方法自动创建报警。这样,用户可以决定是否设置多个报警。啊。我懂了!非常感谢。这是有道理的。你认为onCreate是这样做的正确场所吗?再次感谢。如果您有一个更适合的
    应用程序
    类。此外,每次重新启动时警报都会被清除,因此您需要一个侦听启动完成广播的
    BroadcastReceiver
    ,以便可以重置警报。
    if(!TextUtils.isEmpty(userId)&&alarmManager==null){alarmManager=(alarmManager)getSystemService(Context.ALARM\u服务);Intent Intent=new Intent(MainScreenActivity.this,AlarmReceive.class);pendingIntent=pendingIntent.getBroadcast(MainScreenActivity.this,0,Intent,0);alarmManager.cancel(pendingIntent);alarmManager.setInexactRepeating(alarmManager.RTC_WAKEUP,System.currentTimeMillis(),Constants.trackTimeInterval,pendingent);//每60分钟一次}
    这是正确的方法吗?在第2点上,如果我对文档的阅读是正确的,那么听起来像是你把它倒过来了。如果意图尚未注册,则返回Null,如果已注册,则返回Null。