使用AlarmManager和广播接收器启动Android服务

使用AlarmManager和广播接收器启动Android服务,android,service,alarmmanager,Android,Service,Alarmmanager,我有一个后台安卓服务。它在后台运行,检查URL以获得一些结果。若结果发生变化,应用程序会向用户发送通知。我希望这项服务每3小时运行一次。我的问题是何时以及如何启动服务 一般行为是创建广播接收器 然后,当接收器获得一个操作\u引导\u完成时,启动服务 此外,当接收器完成引导时,接收器将使用AlarmManager并创建一个警报,每3小时运行一次 但在安装应用程序后,如果用户不重新启动手机怎么办?如果用户未启动,AlarmManager将不会创建报警 所以,另一个选项是在用户首次运行应用程序时

我有一个后台安卓服务。它在后台运行,检查URL以获得一些结果。若结果发生变化,应用程序会向用户发送通知。我希望这项服务每3小时运行一次。我的问题是何时以及如何启动服务

  • 一般行为是创建广播接收器
  • 然后,当接收器获得一个
    操作\u引导\u完成时,启动服务
    
  • 此外,当接收器完成引导时,接收器将使用AlarmManager并创建一个警报,每3小时运行一次
但在安装应用程序后,如果用户不重新启动手机怎么办?如果用户未启动,AlarmManager将不会创建报警

  • 所以,另一个选项是在用户首次运行应用程序时创建警报
  • 如果用户重新启动应用程序怎么办?我是否应该使用
    AlarmManager取消所有以前的报警。取消
    并重新创建报警

那么,在哪些情况下,您可以为Android应用程序设置警报?

您有两种方法来创建初始警报,第一次启动应用程序时,或者最好让另一个广播接收器监听
操作\u我的\u包\u被替换。无论何时安装或更新应用程序,都会调用此函数,您可以在安装或更新或重新启动时设置警报(因为重新启动会清除警报管理器中的警报)。然后,只要在每次服务运行时重置警报即可

作为一个额外的提示,如果您还没有使用Android
WakeLock
文档,请查看它们。在服务启动时,如果不设置唤醒锁,手机可能会在服务启动后立即进入睡眠状态。并确保即使您在服务中遇到错误情况(例如,丢失网络连接),也会重置警报


编辑:有些人在更换我的软件包时遇到问题。在这些情况下,只要代码检查被替换的包是否正确,就可以使用被替换的
操作包。

您有两种方法来创建初始警报,第一次启动应用程序时,或者最好让另一个广播接收器监听被替换的
操作包。无论何时安装或更新应用程序,都会调用此函数,您可以在安装或更新或重新启动时设置警报(因为重新启动会清除警报管理器中的警报)。然后,只要在每次服务运行时重置警报即可

作为一个额外的提示,如果您还没有使用Android
WakeLock
文档,请查看它们。在服务启动时,如果不设置唤醒锁,手机可能会在服务启动后立即进入睡眠状态。并确保即使您在服务中遇到错误情况(例如,丢失网络连接),也会重置警报


编辑:有些人在更换我的软件包时遇到问题。在这些情况下,只要代码检查被替换的软件包是否正确,就可以使用
操作\u PACKAGE\u REPLACED

AFAIK,为给定的PendingEvent设置报警(基于给定的意图)取消相同意图的先前报警。试试看。AFAIK,为给定的PendingEvent设置警报(基于给定的意图)会取消相同意图的先前警报。试一试。当我更新我的应用程序时,我会收到“操作\u我的\u包\u被替换”。但它不会在新安装时触发。“ACTION\u PACKAGE\u补充道”并不总是对我有效。因此,我似乎需要在“我的程序包被替换”和“启动”完成时设置警报。此外,我还需要在每次运行我的应用程序时设置警报,否则在重新启动或应用程序更新之前,我的服务不会启动。当我更新我的应用程序时,我会收到“操作\u我的\u包\u替换”。但它不会在新安装时触发。“ACTION\u PACKAGE\u补充道”并不总是对我有效。因此,我似乎需要在“我的程序包被替换”和“启动”完成时设置警报。我还需要在每次运行我的应用程序时设置警报,否则我的服务在重新启动或应用程序更新之前不会启动。