首页 > 解决方案 > 如何调整我的 WebViewActivity 类以打开 market:// 和 intent:// 链接

问题描述

我正在构建一个集成不同优惠墙的应用程序,其中大部分是通过SDK实现的,但其中一些需要通过直接链接打开,所以我需要在Web View中打开这些。

我可以通过直接链接打开优惠墙,但是,我注意到其中的一些优惠包含 market:// 或 intent:// 链接,当我尝试点击其中一个链接时收到一个大错误.

这是我的 WebViewActivity.java:

public class WebViewActivity extends AppCompatActivity {
    public static final String WEBSITE_ADDRESS = "website_address";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String url  = getIntent().getStringExtra(WEBSITE_ADDRESS);
        if (url == null || url.isEmpty()) finish();

        setContentView(R.layout.activity_webview);
        WebView webView = (WebView) findViewById(R.id.nyc_poi_webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl(url);
    }
}

如前所述,它适用于 HTTP 和 HTTPS 链接,但不适用于 market:// 或 intent://

你能给我一些关于如何实现我想要的提示吗?

谢谢!

标签: javaandroidkotlinwebview

解决方案


您可以使用shouldOverrideUrlLoading方法来否认错误。下面我举了一个例子。

webView.setWebViewClient(new 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) {
                // Google Play app is not installed, you may want to open the app store link
                Uri uri = Uri.parse(url);
                view.loadUrl("http://play.google.com/store/apps/" + uri.getHost() + "?" + uri.getQuery());
                return false;
            }

        }
        return false;
    }
});

推荐阅读