Chrome 86.0.4240.75启动URL Intent触发ActivityNotFoundException崩溃求解决方案
解决Chrome for Android 86.0.4240.75的ActivityNotFoundException问题
我最近也碰到了这个一模一样的bug,目前已经找到几个可行的解决办法,分享给你:
方法1:移除MIME类型声明
这个版本的Chrome对text/html类型的Intent匹配出现了异常,直接去掉setDataAndType里的MIME参数就能解决问题:
val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse(url) intent.addCategory(Intent.CATEGORY_BROWSABLE) startActivity(intent)
这种方式最简洁,也能保持原有的Intent跳转逻辑,不会限制用户选择浏览器。
方法2:指定Chrome包名(仅针对Chrome打开场景)
如果你的业务逻辑明确需要用Chrome打开链接,可以直接指定Chrome的包名绕过系统匹配逻辑:
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) intent.addCategory(Intent.CATEGORY_BROWSABLE) intent.setPackage("com.android.chrome") // 记得先检查是否有可用Activity,避免无Chrome时崩溃 if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } else { // 这里可以添加降级处理,比如提示用户安装Chrome或用其他方式打开 }
方法3:使用系统选择器唤起浏览器
这种方法最稳妥,既能避免崩溃,又能保留用户选择浏览器的权利:
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) intent.addCategory(Intent.CATEGORY_BROWSABLE) val chooser = Intent.createChooser(intent, "选择浏览器打开") startActivity(chooser)
系统会弹出应用选择器,不管当前Chrome是否存在这个bug,都能正常唤起可用的浏览器应用。
补充说明
这个问题确实是Chrome 86.0.4240.75的官方bug,Google在后续版本中已经修复了该问题,但由于版本推送还在逐步覆盖,很多用户仍在使用这个有问题的版本,所以临时的兼容方案还是很有必要的。
内容的提问来源于stack exchange,提问作者Jonik
相关产品推荐
相关产品推荐

