【问题标题】:How do you replace the AlarmManager working in the background in Android Oreo while still setting a specific time of day?如何在设置一天中的特定时间的同时替换在 Android Oreo 中在后台工作的 AlarmManager?
【发布时间】:2017-10-25 02:42:52
【问题描述】:

短版:在 Android 8 (Oreo) 中,警报管理器不再在后台工作,Android 人说可以使用 Job Scheduler 作为替代方案,但作业调度器不允许像 Alarm Manager 那样在一天中的特定时间太好了。

加长版:我有一个“提醒”通知,会在用户设置的特定时间发出。到目前为止,我已经使用警报管理器在设定的时间发布通知。即使应用程序在后台,这也会向用户发送通知。但在 Android Oreo / 8.0 中,不再允许这样做。大多数后台服务、接收器等都相当有限。我已经设置了一个作业调度程序,但不允许提供确切的时间。作业调度程序中的定期设置不能提前设置到特定时间。因此,尽管 Android 声称作业调度程序是警报管理器的预期替代品,但它似乎并没有完成人们使用它的关键任务之一,即设置在一天中的特定时间。有谁知道如何在 Android Oreo 中做到这一点,即使应用程序在后台也能正常工作?

我已经尝试过同步适配器(也需要警报管理器!)、处理程序(在特定时间什么都没有)、使用作业服务的不同设置(周期性、最小延迟等)、重置最后一个完成后的通知(在后台也不能这样做!),仍然没有找到有效的解决方案。

有什么东西可以像作业调度程序一样工作(例如,Android 8/Oreo 可以让您在后台运行,但可以让您每天安排一天中的准确时间?

【问题讨论】:

标签: android android-8.0-oreo


【解决方案1】:

在 Android 8 (Oreo) 中,警报管理器不再在后台工作

我不知道有关 AlarmManager 在 Android 8.0 中的任何更改。随意指向文档或问题跟踪器条目以验证您的声明。或者,使用可重现的测试用例提交您自己的问题。

但在 Android Oreo / 8.0 中,不再允许这样做了。

当然可以,至少在 Android 6.0 到 7.1 中运行良好。打瞌睡模式和应用待机已与 AlarmManager 搞砸了,但这对 Android 8.0 来说并不新鲜。

大多数后台服务、接收器等都相当有限。

他们仍然可以提出Notification,这就是您的问题表明您想要做的事情。

有没有人知道在 Android Oreo 中执行此操作的方法,即使应用程序在后台也能正常工作?

使用AlarmManager。由于您正在编写相当于闹钟应用程序的内容,use setAlarmClock()

【讨论】:

  • 是的,这是一个重要的说明。实际上问题不是警报管理器,而是应用程序在后台时它可以启动的限制。但最终,您不能再将警报管理器用于此类功能,即将通知设置为在一天中的特定时间(每天)发出。
【解决方案2】:

我可以建议的一个解决方案可能会解决您的问题。 您应该启动工作计划 15 分钟中继器模式并每分钟调用一次广播,您可以在其中检查当前时间是否是您一天中的特定时间。 如果是,则发送通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多