如果使用 WebChromeClient 点击了 market:// 链接,则打开 Play 商店

Posted

技术标签:

【中文标题】如果使用 WebChromeClient 点击了 market:// 链接,则打开 Play 商店【英文标题】:Open Play Store if market:// link tapped using WebChromeClient 【发布时间】:2019-02-26 06:58:24 【问题描述】:

如果用户点击这种类型的链接,我想打开 Play 商店:market://我尝试使用 getUrl(),但它仅在第一次获取 URL,而不是当用户点击 webView 中的其他链接时。 这是我的代码:

    swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipeLayout);
    swipeLayout.setOnRefreshListener(this);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    progressBar.setMax(100);
    webview = (WebView) findViewById(R.id.dashboard);
    webview.getSettings().setjavascriptEnabled(true);
    webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webview.loadUrl("http://example.test");
    webview.setWebViewClient(new WebViewClient());
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
        webview.setLayerType(View.LAYER_TYPE_HARDWARE, null);
     else 
        webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    
    progressBar.setProgress(0);
    webview.setWebChromeClient(new WebChromeClient());

    webview.setWebChromeClient(new WebChromeClient() 
        public void onProgressChanged(WebView view, int progress) 

            progressBar.setProgress(progress);

            if (progress == 100) 
                progressBar.setVisibility(View.GONE);
             else 
                progressBar.setVisibility(View.VISIBLE);
            
            super.onProgressChanged(view, progress);
        
    );

【问题讨论】:

使用您自己的 WebViewClient 自定义子类,在其中覆盖 shouldOverrideUrlLoading() 并注意该 URL。 【参考方案1】:

我让它像这样工作:创建了新的子类:

    private class HelloWebViewClient extends WebViewClient 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
        if (Uri.parse(url).getScheme().equals("market")) 
            try 
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                Activity host = (Activity) view.getContext();
                host.startActivity(intent);
                return true;
             catch (ActivityNotFoundException e) 
                Uri uri = Uri.parse(url);
                view.loadUrl("http://play.google.com/store/apps/" + uri.getHost() + "?" + uri.getQuery());
                return false;
            
        
        return false;
    

还在 webview 中添加了子类: webview.setWebViewClient(new HelloWebViewClient());

【讨论】:

以上是关于如果使用 WebChromeClient 点击了 market:// 链接,则打开 Play 商店的主要内容,如果未能解决你的问题,请参考以下文章

android webview怎样点击按钮全屏播放

WebChromeClient 集成到 Android 应用程序中

无法使用 WebChromeClient 播放 DRM 内容

Cordova 6.2.3 没有 WebChromeClient,如何覆盖 onJsPrompt()?

在 WebView 中点击表单字段不显示软键盘

WebView使用详解——WebChromeClient与LoadData补充