Android 11 适配 软件包可见性
Posted Lucky_William
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 11 适配 软件包可见性相关的知识,希望对你有一定的参考价值。
android 11 软件包可见性 适配
目录
一、软件包可见性说明
如果应用以 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. 受影响的方法列表
// 检索可以为给定意图执行的所有 activity
PackageManager.queryIntentActivities(intent, flag)
// 检索可以匹配给定意图的所有服务
PackageManager.queryIntentServices(intent, flag)
// 检索可以处理给定意图广播的所有接收器
PackageManager.queryBroadcastReceivers(intent, flag)
// 查询内容提供者
PackageManager.queryContentProviders(processName, uid, flag)
// 获取为当前用户安装的所有软件包的列表。
PackageManager.getInstalledPackages(flag)
// 获取已安装的应用程序
PackageManager.getInstalledApplications(flag)
二、软件包可见性配置
1. 检查是否有可用浏览器,例如需要打开外部浏览器
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
</manifest>
2. 检查设备能否打开给定文件,如需要打开 pdf、zip
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="*/*" />
</intent>
</queries>
</manifest>
3. 创建自定义共享表单,如分享图片、文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="*/*" />
</intent>
</queries>
</manifest>
4. 显示自定义文字选择操作,如选中一段文字,进行复制、粘贴操作
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT" />
<data android:mimeType="text/plain" />
</intent>
</queries>
</manifest>
5. 连接到文字转语音引擎
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
</manifest>
6. 连接到语音识别服务
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
</queries>
</manifest>
7. 显示联系人的自定义数据行
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<!-- Allows the app to read the "contacts.xml" file from the other apps. -->
<intent>
<action android:name="android.accounts.AccountAuthenticator" />
</intent>
<!-- Allows the app to load an icon corresponding to the custom MIME type. -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data
android:host="com.android.contacts"
android:mimeType="vnd.android.cursor.item/*"
android:scheme="content" />
</intent>
</queries>
</manifest>
8. 连接到媒体浏览器服务
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.media.browse.MediaBrowserService" />
</intent>
</queries>
</manifest>
9. 配置访问 微信,支付宝,QQ,微博
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<!--微信-->
<package android:name="com.tencent.mm" />
<!--支付宝-->
<package android:name="com.eg.android.AlipayGphone" />
<package android:name="hk.alipay.wallet" />
<!--QQ-->
<package android:name="com.tencent.qqlite" />
<package android:name="com.tencent.mobileqq" />
<!--新浪微博-->
<package android:name="com.sina.weibo" />
</queries>
</manifest>
10. 配置查询所有应用及与之交互(以上均可不配置,但 gp 会严格审核)
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
附 Github 源码:
以上是关于Android 11 适配 软件包可见性的主要内容,如果未能解决你的问题,请参考以下文章