首页 > 解决方案 > WhatsApp 自定义 url 方案在 Webview 中不起作用

问题描述

我在 android 中进行 webview,我在该网站中调用网站链接,我正在调用web.whatsapp.com链接。现在这个链接在桌面和移动视图中运行良好,而如果我在 webview 中打开相同的链接然后显示错误,即网页不可用更清晰,让我们看看错误图像

在此处输入图像描述

这是webview android的代码

public class MainActivity extends AppCompatActivity {
    WebView webView;
    ProgressBar bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView2);
        bar =(ProgressBar) findViewById(R.id.progressBar2);
        webView.setWebViewClient(new myWebClient());
        webView.loadUrl("http://.../");
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new myWebClient());
    }

    public class myWebClient extends WebViewClient{

        @Override
        public void onPageFinished(WebView view, String url) {
            bar.setVisibility(View.GONE);
            view.setVisibility(webView.VISIBLE);
            super.onPageFinished(view, url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            bar.setVisibility(View.VISIBLE);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            bar.setVisibility(View.GONE);
            return super.shouldOverrideUrlLoading(view, url);
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
            webView.goBack();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }
}

标签: androidurlandroid-webviewwhatsapp

解决方案


尝试override shouldOverrideUrlLoading在您的网络客户端中使用下面给出的代码。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    boolean overrideUrlLoading = false;

    if (url != null && url.startsWith("whatsapp://")) {

        view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

        overrideUrlLoading = true;

    } else {

        view.loadUrl(url);
    }

    return overrideUrlLoading;
} 

推荐阅读