政策更新 | 开发者如何处理软件包可见性
以下文章来源于Android 开发者 ,作者Android
过滤后的已安装应用列表 https://developer.android.google.cn/training/basics/intents/package-visibility#automatic
查询应用并与之交互
您可以通过以下几种方式查询应用并与之交互:
如果您知道想要查询或与之交互的特定应用集,请将其软件包名称包含在 <queries> 元素内的一组 <package> 元素中。
<manifest package="com.example.game">
<queries>
<package android:name="com.example.store" />
<package android:name="com.example.services" />
</queries>
...
</manifest>
如果您的应用需要查询或与一组具有特定用途的应用交互,但您可能不知道要添加的具体软件包名称,您可以将 intent 过滤器签名列在您的 <queries> 元素中。然后,您的应用便可发现具有匹配的 <intent-filter> 元素的应用。
<manifest package="com.example.game">
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
...
</manifest>
如果您需要查询 Content Provider,但不知道具体的软件包名称,则可以在 <provider> 元素中声明该提供程序授权。
<manifest package="com.example.suite.enterprise">
<queries>
<provider android:authorities="com.example.settings.files" />
</queries>
...
</manifest>
软件包 https://developer.android.google.cn/training/basics/intents/package-visibility#package-name intent 过滤器签名 https://developer.android.google.cn/training/basics/intents/filters Content Provider https://developer.android.google.cn/guide/topics/providers/content-provider-basics#ContentURIs
Google Play 政策更新|2021 年 3 月
腾讯视频链接 https://v.qq.com/x/page/h3238tkvuu6.html
Bilibili 视频链接 https://www.bilibili.com/video/BV1qX4y1g75U/ 政策更新 https://support.google.com/googleplay/android-developer/answer/9934569?hl=en&ref_topic=9877065
Activity 标记
try {
val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply {
addCategory(CATEGORY_BROWSABLE)
}
startActivity(intent)
} catch (e:ActivityNotFoundException) {
Snackbar.make(it,"Activity Not Found",Snackbar.LENGTH_LONG).show()
}
使用标记的常见示例是自定义标签页,自定义标签页让应用可以自定义浏览器的外观。链接将在非浏览器应用 (如果有) 中正确打开,而标记则可以在开发者希望能够自由选择 "自定义标签页" 浏览器的高级用例中提供帮助。
隐式 intent
https://developer.android.google.cn/guide/components/intents-filters#Types
自定义标签页
https://developer.chrome.com/docs/android/custom-tabs/overview/
val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply {
// The URL should either launch directly in a non-browser app (if it's
// the default), or in the disambiguation dialog.
addCategory(CATEGORY_BROWSABLE)
flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER
}
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
https://developer.android.google.cn/reference/android/content/Intent#FLAG_ACTIVITY_REQUIRE_NON_BROWSER
ActivityNotFoundException https://developer.android.google.cn/reference/android/content/ActivityNotFoundException
自定义共享表单
调试软件包可见性
$ adb shell pm log-visibility --enable YOUR_PACKAGE_NAME
后续步骤
有关软件包可见性的详细信息,您可以参阅以下资源:
文档: 软件包可见性 https://developer.android.google.cn/training/package-visibility Android 11 中的软件包可见性
推荐阅读