Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌论坛短URL在Android应用程序Webview中不起作用_Android_Kotlin_Webview_Google Forms - Fatal编程技术网

谷歌论坛短URL在Android应用程序Webview中不起作用

谷歌论坛短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

我使用谷歌论坛在网站上填写详细信息,使用该网站在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/

并使用以下设置:

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)
            }