查看最新的Android Oreo发行说明,似乎应用程序只能注册少数隐式广播。 ACTION_PACKAGE_ADDED和ACTION_PACKAGE_REMOVED不在其中。是否有接收这些广播的解决方法?
来自the docs:
针对Android 8.0或更高版本的应用无法再在其清单中注册隐式广播的广播接收器。隐式广播是一种不专门针对该应用的广播。例如,ACTION_PACKAGE_REPLACED是隐式广播,因为它被发送到所有已注册的侦听器,让他们知道设备上的某些包已被替换。
这表示您无法在清单中注册这些意图。您仍然可以以编程方式注册它们,以便在您的应用运行时接收它们。
您也可以尝试ACTION_PACKAGE_FULLY_REMOVED,这是您仍然可以通过在清单中注册它来听取的exceptions之一。添加包时没有这样的“替代”。
正如CW所说,您还可以定期检查已安装应用程序名单中的更改。
您还可以使用轮询,设置JobScheduler作业以便经常检查,通过getChangedPackages()向PackageManager询问已安装应用程序列表中的更改内容。
发布于https://stackoverflow.com/a/55819091/1848826
我可以使用以下代码
class KotlinBroadcastReceiver(action: (context: Context, intent: Intent) -> Unit) : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) = action(context, intent) } class MainActivity : AppCompatActivity() { private val broadcastReceiver = KotlinBroadcastReceiver { context, _ -> Toast.makeText(context, "It works", Toast.LENGTH_LONG).show() } override fun onCreate(savedInstanceState: Bundle?) { registerReceiver(broadcastReceiver, IntentFilter().apply { addAction(Intent.ACTION_PACKAGE_ADDED) addAction(Intent.ACTION_PACKAGE_REMOVED) addDataScheme("package") // I could not find a constant for that :( }) } override fun onDestroy() { super.onDestroy() unregisterReceiver(broadcastReceiver) } }