Android WebView中跳转第三方app

1,618 阅读1分钟

当webView中加载的某些页面需要跳转第三方app时,我们可以直接复写shouldOverrideUrlLoading(),在其中通过隐式Intent来进行跳转。

需要注意的是当设备上没有目标Activity时,直接startActivity会抛出ActivityNotFindException,所以我们在跳转前要使用resolveActivity()来判断当前设备内是否有目标Activity。

override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
    val intent = Intent.parseUri(request.url.toString(), Intent.URI_INTENT_SCHEME)
    return if (intent.resolveActivity(view.context.packageManager) != null) {
        view.context.startActivity(intent)
        true
    } else {
        false
    }
}

另外,在Android 11及以上版本,Google修改了查询设备上其他已安装应用的权限,我们需要在manifast中做一些声明才能查询。否则resolveActivity()只会返回null。详情可参考官方文档 Android 11 中的软件包可见性

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
        </intent>
    </queries>
    ...
</manifest>

如有错误,欢迎指正。