当我们尝试通过 Intent 打开另一个程序时,Logcat 中可能出现一下错误:
AppsFilter system_server I interaction: PackageSetting{6ec3c0b cn.itmob.test/10337} -> PackageSetting{7eda3ef cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{a16a02c cn.itmob.compose.sample/10329} -> PackageSetting{7eda3ef cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{5a59b3 com.google.android.microdroid.empty_payload/10256} -> PackageSetting{7eda3ef cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{9efbc6b com.google.samples.apps.nowinandroid.debug/10327} -> PackageSetting{7eda3ef cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{6adb168 com.example.jetnews/10320} -> PackageSetting{7eda3ef cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{6ec3c0b cn.itmob.test/10337} -> PackageSetting{a80d0ed cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{a16a02c cn.itmob.compose.sample/10329} -> PackageSetting{a80d0ed cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{5a59b3 com.google.android.microdroid.empty_payload/10256} -> PackageSetting{a80d0ed cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{9efbc6b com.google.samples.apps.nowinandroid.debug/10327} -> PackageSetting{a80d0ed cn.itmob.demo/10275} BLOCKED
AppsFilter system_server I interaction: PackageSetting{6adb168 com.example.jetnews/10320} -> PackageSetting{a80d0ed cn.itmob.demo/10275} BLOCKED
这是 Android 11 (API 级别 30) 增加了安全限制,如果应用以 Android 11(API 级别 30)或更高版本为目标平台(targetSDKVersion),需要在 AndroidManifest.xml 清单文件中加入
解决办法:
-
降低目标平台(targetSDKVersion)
在 build.gradle 中,降低 targetSDKVersion 为 29 或更低版本
-
指定要查询或交互的应用包名
如果知道要查询或交互的一组特定应用(例如,与您的应用集成的应用或您使用其服务的应用),将其软件包名称添加到
<queries>
元素内的一组<package>
元素中:<manifest package="cn.itmob.test"> <queries> <package android:name="cn.itmob.compose.sample" /> <package android:name="cn.itmob.demo" /> </queries> ... </manifest>
-
查询所有应用
如果您的应用可能需要查询设备上所有已安装的应用或与之交互(这种情况很少见),您可以选择 Android 11 中引入的 QUERY_ALL_PACKAGES 权限。
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
-
通过
标签指定 intent 过滤器 (intent)或 提供授权 <manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> <provider android:authorities="com.example.settings.files"/> </queries> ... </manifest>
更多关于 Android 11 包可见性的介绍:适配 Android 11 (R) 的包可见性