android - 如何在 Android Oreo 中更新应用程序后重新启动前台服务?
问题描述
在应用程序从 Google Play 自动更新后,我们需要重新启动应用程序的前台服务。对于 SDK < 26,我们在 PACKAGE_REPLACED actoin 上注册了接收器,一切正常。如果隐式意图被禁止,我们如何在 SDK 26 中做同样的事情?谢谢。
解决方案
首先,并非所有隐式广播都被禁止。有一个白名单。
其次,ACTION_MY_PACKAGE_CHANGED
是显式广播,仅发送到您的应用程序。引用文档:
面向 Android 8.0 或更高版本的应用无法再在其清单中为隐式广播注册广播接收器。隐式广播是不专门针对该应用程序的广播。例如,ACTION_PACKAGE_REPLACED 是一个隐式广播,因为它被发送给所有注册的监听器,让他们知道设备上的某些包被替换了。但是, ACTION_MY_PACKAGE_REPLACED 不是隐式广播,因为它只发送到包被替换的应用程序,无论有多少其他应用程序为该广播注册了侦听器。
因此,您应该能够注册ACTION_MY_PACKAGE_REPLACED
并在那里重新启动您的服务。
推荐阅读
- session - 使用特定会话的屏幕命令脚本?
- php - 模态不想打开 - Bootstrap
- amazon-web-services - 使用 SQS 触发器降低 AWS lambda 的吞吐量
- swift - RealmSwift 10.15.1 不保存用户创建的条目
- python - 使用 attrs 创建具有互斥参数的 Python 类
- vb.net - 在 VB.NET 中将未知结构转换为无类型对象
- c# - 解析 Json 架构 - C# - 无法解析架构引用
- vuex - 从操作调用 api 时 Vuex 状态保持未定义
- java - Spring Security Saml 错误从 SOAP 响应解密密钥 - 没有安装的提供程序支持此密钥:sun.security.ec.ECPrivateKeyImpl
- c++ - 被调用的对象类型“int”不是函数或函数指针