如果使用 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 商店的主要内容,如果未能解决你的问题,请参考以下文章
WebChromeClient 集成到 Android 应用程序中
无法使用 WebChromeClient 播放 DRM 内容