问题说明
项目内测试伙伴在测试Deeplink跳转时发现了一个闪退,查询错误日志得到原因是No Activity found to handle Intent
。
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=scheme://host?source=mainPage }
查询具体的错误发生位置为调起Deeplink的代码,代码如下:
var url = getDeepLink() ?: ""
var intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
if (context != null ){
tryStartActivity(context!!, intent)
}
原因分析
此处代码是通过Intent启动方式调起第三方应用,但是没有完全考虑第三方应用没有存在的情况。
如果Deeplink对应的第三方应用不存在的情况下,就有可能出现无法调起的错误,还有可能出现崩溃。
解决办法
发生错误的根本原因在于没有对应的Activity去承接Intent的处理,因此可以在在StartActivity之前对Intent进行判断,方法为intent.resolveActivity
,并对不存在情况进行处理,示例代码如下:
var url = getDeepLink() ?: ""
var intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
if (context != null && intent.resolveActivity(context!!.packageManager)!=null) {
tryStartActivity(context!!, intent)
}
网友评论