Android 12如何强制指定链接在Chrome等浏览器中打开而非自有应用
Android 12+ 强制链接在浏览器打开解决方案
Android 12引入的App Links验证机制会将通过验证的域名默认绑定到你的应用,普通的ACTION_VIEW Intent会优先唤起绑定应用,要绕过该逻辑可使用以下实现方案:
方案1:通用浏览器唤起(不限制具体浏览器)
构造Intent时设置selector仅匹配支持http/https协议的浏览器类应用,直接跳过App Links的应用绑定匹配:
val targetUrl = "https://需要打开的目标链接" val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(targetUrl)).apply { // 限定仅匹配可处理http协议的浏览器应用 selector = Intent(Intent.ACTION_VIEW, Uri.parse("http://")) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } if (browserIntent.resolveActivity(packageManager) != null) { startActivity(browserIntent) } else { // 无可用浏览器的自定义兜底逻辑 }
如果需要让用户自行选择浏览器,可使用Intent.createChooser封装上述Intent,弹出的选择列表仅会展示浏览器类应用,不会出现你的应用:
val chooser = Intent.createChooser(browserIntent, "选择浏览器打开") startActivity(chooser)
方案2:强制唤起Chrome浏览器
如果需要固定使用Chrome打开链接,直接指定Chrome包名即可:
val targetUrl = "https://需要打开的目标链接" val chromeIntent = Intent(Intent.ACTION_VIEW, Uri.parse(targetUrl)).apply { setPackage("com.android.chrome") addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } try { startActivity(chromeIntent) } catch (e: ActivityNotFoundException) { // 未安装Chrome的兜底逻辑,可回退到方案1的通用唤起逻辑 }
注意事项
- 不要给唤起Intent添加
CATEGORY_BROWSABLE类别,否则会触发App Links匹配逻辑,重新唤起你的应用 - 上述方案均已适配Android 13及以上系统版本,不会触发应用链接的绑定唤起逻辑
内容的提问来源于stack exchange,提问作者Spyros G
相关产品推荐
相关产品推荐

