<manifest package="com.example.game">
<queries>
<!-- 声明所要进行交互的应用名 -->
<package android:name="com.example.store" />
<package android:name="com.example.service" />
<!--
声明要查询的 intents
例如下列标签声明了一个自定义的分享视图的 intent
-->
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
...
</manifest>
大部分常见场景
https://developer.android.google.cn/preview/privacy/package-visibility#use-cases-not-affected
其他场景
https://developer.android.google.cn/preview/privacy/package-visibility-use-cases
intent filter 签名
https://developer.android.google.cn/preview/privacy/package-visibility#intent-signature
try {
val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply {
// 非浏览器应用会直接处理该 URL(默认情况下)
// 用户也可以在消除歧义对话框中选择非浏览器应用
addCategory(CATEGORY_BROWSABLE)
flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER
}
startActivity(intent)
} catch (e: ActivityNotFoundException) {
// 只能使用浏览器应用,或者默认使用浏览器处理该 intent。
}
Custom Tab
https://developers.google.cn/web/android/custom-tabs
更好的办法
https://developer.android.google.cn/preview/privacy/package-visibility-use-cases#avoid-a-disambiguation-dialog
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
https://developer.android.google.cn/preview/privacy/package-visibility#web-intent-non-browser-app
Android Studio 和 Gradle 对该功能的支持
Android resource linking failed
/Users/sample/AndroidStudioProjects/MyApp/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml:18: error: unexpected element <queries> found in <manifest>
Manifest merger failed with multiple errors, see logs
Error: Missing 'package' key attribute on element package
Merged Manifest 视图
https://developer.android.google.cn/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts
修复 Android Gradle 插件的问题
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.android.tools.build:gradle:4.0.1'
}
}
了解更多 Android 11 相关信息,请查阅以下资源:
推荐阅读