【问题标题】:How to get broadcast ACTION_POWER_CONNECTED on Android 8如何在 Android 8 上获得广播 ACTION_POWER_CONNECTED
【发布时间】:2018-11-22 21:05:48
【问题描述】:

我正在尝试制作一个应用程序,当您在一天中的特定时段将手机连接到充电器时显示一些信息。

在 Android Oreo 之前,这很容易,只需添加一个广播接收器并将 android.intent.action.ACTION_POWER_CONNECTED 添加到清单中的 intentfilter。

现在我正在努力寻找一个可行的解决方案来创建相同的功能。 我想过定期检查设备的充电状态,但感觉不对,并且在将设备连接到充电器时不会立即触发。

从我的应用程序注册广播接收器也不起作用,当应用程序关闭时,不再接收到广播。

当 Android 设备连接到 Android Oreo 中的充电器时,是否有一种电池友好的方式来触发操作?

【问题讨论】:

标签: android broadcastreceiver android-8.0-oreo


【解决方案1】:

broadcasts 被排除在background execution limitations 之外,并且广播接收器仍然可以在清单中注册。

您可以使用 ACTION_BOOT_COMPLETED 广播来启动一个服务,该服务会在运行时为您的 ACTION_POWER_CONNECTED 广播注册一个接收器。 (服务必须是foreground service,否则可能会被销毁。)

另一种解决方案是使用 JobScheduler 创建requires charging 的作业。那你就不需要前台服务了。

【讨论】:

  • 我为 N 以外的所有 android 版本使用了前台服务。该服务为 ACTION_POWER_CONNECTED 注册了一个 BroadcastReceiver。接下来我使用了一个 BOOT_COMPLETE BroadcastReceiver 来启动前台服务。对于早期的 Android 版本,我使用了使用 BroadcastReceiver 并将 ACTION_POWER_CONNECTED 添加到清单的标准方法。
  • @Matt ke,第二个建议的解决方案 - 创建一个 JobScheduler,即使我的应用程序被杀死也能工作吗?我的意思是它会像我在清单中使用接收器一样触发吗?
  • 是的,即使你的应用被杀死,你的工作也会被执行。
  • 如果我使用作业调度器,它会在“每次”连接电源时工作还是在工作安排后只工作一次?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多