Android WebView 中的深层链接

时间:2021-03-22 21:29:15

标签: android kotlin android-intent android-webview

我正在尝试将我的应用重定向到通过 WebView 查看的网页上的深层链接引用的新活动。

我有一个覆盖,我正在用它创建我的 WebViewClient。

class myClient : WebViewClient(){
    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        if (url.toString().startsWith(DEEP_LINK_PREFIX)) {
            var intent: Intent = Intent(Intent.ACTION_VIEW)
            intent.setData(Uri.parse(url))
            if (intent != null) {
                startActivity(intent);
            } else {
                Toast.makeText(this, "no_apps_to_handle_intent", Toast.LENGTH_SHORT).show();
            }
            return true
        }

        return super.shouldOverrideUrlLoading(view, url)

    }
}

但是,当我尝试构建时,出现以下错误:

e: /home/mpoletiek/AndroidStudioProjects/TestApp/app/src/main/java/com/example/testapp/MainActivity.kt: (45, 31): Type mismatch: inferred type is Intent but Context was expected

我在网上能找到的所有例子都是这样使用 Intent 和 startActivity 的,我错过了什么?

谢谢,

1 个答案:

答案 0 :(得分:0)

我通过将 MainActivity 的上下文传递给我的自定义 WebViewClient 类解决了这个问题。

class myClient(context: Context) : WebViewClient(){
    var myContext = context
    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {


        if (url.toString().startsWith(DEEP_LINK_PREFIX)) {
            var intent: Intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            Log.i(INFO_TAG,"INTENT TRIGGERED: "+url.toString())

            myContext.startActivity(intent)

            return true
        }

        return super.shouldOverrideUrlLoading(view, url)

    }
}