在我的应用程序中,我设置了一个警报,当运行时,它会启动一个执行任务的服务(在我的应用程序中,它会在没有用户交互的情况下发送文本消息)。这条消息可以设置为未来 2 小时,也可以设置为未来一年。这是我如何实现它。
在我的主要活动中
用户键入消息,选择日期和时间(转换为毫秒),并且该警报时间(毫秒)被永久保存。然后我调用一个我设置为粘性的服务,并在启动时启动。
在我的服务。
当服务被调用时(在您第一次安排消息之后,它现在一直在运行),它会使用保存的警报时间创建警报。这很好,因为如果手机重新启动,警报将再次重新创建。
这是问题
警报时间过去后,消息已成功发送,我看不到关闭该服务始终运行的方法。因此,一旦服务被杀死并重新启动(例如手机重新启动时),它就会启动,看到警报时间已经过去,并立即启动发送消息的服务。因此,在我清除应用程序上的数据之前,我会在未来随机发送随机重复消息。
我的解决方案(不优雅)。
消息第一次发送后,我将 50 年(以毫秒为单位)添加到警报时间,并永久重新保存。这样它就不会再次触发,直到用户真正自己设置时间。这似乎奏效了,但 IMO 是一个糟糕的解决方案。
必须有一种更合适的方法来设置持续警报只运行一次。对AlarmManager有更多经验的人可以告诉我吗?