应用
如果已经制作了一个使用静态注册的广播接收器订阅BATTERY_LOW意图的应用程序,则当该应用程序接收到该应用程序时,它将获取该位置并将其通过电子邮件发送给用户。该应用程序运行良好已有多年。
问题
最近Google强迫开发人员针对目标API 26进行优化
但是在设置了目标版本之后,该应用程序将永远不会启动,我会在日志中得到它:
W / BroadcastQueue(1113):不允许后台执行:正在接收 意图{act = android.intent.action.BATTERY_LOW flg = 0x4000010(has })到com.androidlost / .receivers.BatteryLevelReceiver
解决方案
我已阅读https://commonsware.com/blog/2017/04/11/android-o-implicit-broadcast-ban.html,该书建议:
如果您正在接收系统发送的隐式广播(例如, ACTION_PACKAGE_ADDED),将targetSdkVersion保持在25或更低, 直到我们找到更好的解决方法(希望)不涉及 轮询。
但这不再可能,因为Google现在强迫我们将目标版本设置为较高。
我唯一能想到的想法是提供一个运行中的服务,该服务可以动态注册广播接收器。但是,仅以BATTERY_LOW意图接收正在运行的服务几乎没有意义。
问题
如何从静态注册的广播接收器启动我的应用程序?欢迎任何建议或提示-手机断电之前,必须能够接收电话的位置...