谷歌论坛短URL在Android应用程序Webview中不起作用
我使用谷歌论坛在网站上填写详细信息,使用该网站在android应用程序的Webview。当我试图在Webview中打开Google论坛的短链接时,显示错误:net::ERR\u UNKNOWN\u URL\u SCHEME,错误代码:-10 在webview屏幕中显示以下行: 意向:/;无法加载,因为:net::ERR\u未知\u URL\u方案 完整Url正常工作,浏览器中的Url正常工作 使用的语言:Kotlin, 安卓设备:三星A 10, 安卓版本:9派 使用的代码: webview.loadUrlhttps://forms.gle/ 并使用以下设置:谷歌论坛短URL在Android应用程序Webview中不起作用,android,kotlin,webview,google-forms,Android,Kotlin,Webview,Google Forms,我使用谷歌论坛在网站上填写详细信息,使用该网站在android应用程序的Webview。当我试图在Webview中打开Google论坛的短链接时,显示错误:net::ERR\u UNKNOWN\u URL\u SCHEME,错误代码:-10 在webview屏幕中显示以下行: 意向:/;无法加载,因为:net::ERR\u未知\u URL\u方案 完整Url正常工作,浏览器中的Url正常工作 使用的语言:Kotlin, 安卓设备:三星A 10, 安卓版本:9派 使用的代码: webview.lo
webview?.getSettings()?.javaScriptCanOpenWindowsAutomatically = true
webview?.getSettings()?.setAppCacheEnabled(true)
webview?.getSettings()?.setAppCachePath(this.cacheDir.path)
webview?.getSettings()?.cacheMode = WebSettings.LOAD_DEFAULT```
要解决这些类型的问题,我们必须验证设置为WebView的WebView客户端的shouldOverrideUrlLoading方法。有时,重写URL可以从意图开始,因此必须以其他方式处理它们。附上下面的示例代码
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (url.startsWith("http:") || url.startsWith("https:")) {
return false;
} else {
if (url.startsWith("intent://")) {
try {
Context context = webView.getContext();
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
if (intent != null) {
PackageManager packageManager = context.getPackageManager();
ResolveInfo info = packageManager.resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY);
// This IF statement can be omitted if you are not strict about
// opening the Google form url in WebView & can be opened in an
// External Browser
if ((intent != null) && ((intent.getScheme().equals("https"))
|| (intent.getScheme().equals("http")))) {
String fallbackUrl = intent.getStringExtra(
"browser_fallback_url");
webView.loadUrl(fallbackUrl);
return true;
}
if (info != null) {
context.startActivity(intent);
} else {
// Call external broswer
String fallbackUrl = intent.getStringExtra(
"browser_fallback_url");
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(fallbackUrl));
context.startActivity(browserIntent);
}
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
} else {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
webView.getContext().startActivity(intent);
return true;
}
}
}
});
谷歌支持的kotlin解决方案
谢谢,请解释您的解决方案,因为它看起来很复杂。我只采用了我认为相关的几种方法。
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
if (url.startsWith("intent://")){
val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
if(intent != null){
val fallbackUrl = intent.getStringExtra("browser_fallback_url")
return if (fallbackUrl != null){
mDiscourse?.loadUrl(fallbackUrl)
true
} else {
false
}
}
}
return super.shouldOverrideUrlLoading(view, url)
}