我正在尝试将我的应用重定向到通过 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 的,我错过了什么?
谢谢,
答案 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)
}
}