场景
在跳转外部浏览器的时候
val uri: Uri = Uri.parse(url)
val intent = Intent(Intent.ACTION_VIEW, uri)
activity.startActivity(intent)
发现部分机型有时会闪退,报错 ActivityNotFoundException: No Activity found to handle Intent
可能原因
外部没有可以处理该intent的组件。可能是外部浏览器初始化的问题。因为在出现闪退几次之后在进行调用,发现又可以了。
相关文档 ->
No Activity found to handle Intent : android.intent.action.VIEW
intent.resolveActivity != null but launching the intent throws an ActivityNotFound exception
解决方案
对url进行使用前校验,通过resolveActivityInfo方法判断是否可处理,再通过try…catch进行一场处理。
try {
var uri: Uri ?= null
if (!url.startsWith("http://") && !url.startsWith("https://")) {
uri = Uri.parse("http://$url");
}
val intent = Intent(Intent.ACTION_VIEW, uri)
val activityInfo: ActivityInfo = intent.resolveActivityInfo(activity.packageManager, intent.flags)
if (activityInfo.exported) {
activity.startActivity(intent)
}
}catch (e: Exception){
//异常处理
}