一、软件包可见性说明
如果应用以 Android 11(API 级别 30)或更高版本为目标平台,在默认情况下,系统会自动让部分应用对您的应用可见,但会隐藏其他应用。
通过让部分应用在默认情况下不可见,系统可以了解应向应用显示哪些其他应用,这样有助于鼓励最小权限原则。
注意:
- 如果您的应用以 Android 10(API 级别 29)或更低版本为目标平台,那么全部应用均会自动对您的应用可见。
- 即使您的应用以 Android 11(API 级别 30)或更高版本为目标平台,特定场景不会受影响。
1. 不受影响的特定场景
- 实现 Android 核心功能的某些系统软件包,如媒体提供程序。
- 使用 startActivityForResult() 方法启动其他应用的某个页面。
- 通过 Content Provider 访问的应用。
- 具有 Content Provider 的任何应用,且应用已被授予 URI 权限来访问该 Content Provider。
- 可以使用隐式或显式 intent 来启动另一应用的 activity,无论这个应用是否对您的应用可见。
2. 受影响的方法列表
1 | // 检索可以为给定意图执行的所有 activity |
二、软件包可见性配置
1. 检查是否有可用浏览器,例如需要打开外部浏览器
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
2. 检查设备能否打开给定文件,如需要打开 pdf、zip
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
3. 创建自定义共享表单,如分享图片、文件
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
4. 显示自定义文字选择操作,如选中一段文字,进行复制、粘贴操作
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
5. 连接到文字转语音引擎
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
6. 连接到语音识别服务
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
7. 显示联系人的自定义数据行
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
8. 连接到媒体浏览器服务
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
9. 配置访问 微信,支付宝,QQ,微博
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
10. 配置查询所有应用及与之交互(以上均可不配置,但 gp 会严格审核)
1 | <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> |
附 Github 源码:
转载自Lucky_William:https://blog.csdn.net/java_android_man/article/details/122133434