政策更新 | 开发者如何处理软件包可见性
过滤后的已安装应用列表
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
腾讯视频链接
https://v.qq.com/x/page/h3238tkvuu6.htmlBilibili 视频链接
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/
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
只有 intent 解析为非浏览器结果时,此标记才会启动它。如果此类结果不存在,将抛出 ActivityNotFoundException,然后,您的应用可以在自定义标签页中打开该网址。
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 中的软件包可见性
推荐阅读