How to handle intent:// on a webView URL?

前端 未结 2 975
南方客
南方客 2020-12-14 02:27

I\'m currently developing an android app with a webView. On some urls I need to use the shouldOverrideUrlLoading method, which is pret

2条回答
  •  失恋的感觉
    2020-12-14 02:39

    Structure of this intent url is described here https://developer.chrome.com/multidevice/android/intents.

    So we can handle it in internal WebView like this:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("intent://")) {
            try {
                Context context = view.getContext();
                Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
    
                if (intent != null) {
                    view.stopLoading();
    
                    PackageManager packageManager = context.getPackageManager();
                    ResolveInfo info = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
                    if (info != null) {
                        context.startActivity(intent);
                    } else {
                        String fallbackUrl = intent.getStringExtra("browser_fallback_url");
                        view.loadUrl(fallbackUrl);
    
                        // or call external broswer
    //                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(fallbackUrl));
    //                    context.startActivity(browserIntent);
                    }
    
                    return true;
                }
            } catch (URISyntaxException e) {
                if (GeneralData.DEBUG) {
                    Log.e(TAG, "Can't resolve intent://", e);
                }
            }
        }
    
        return false;
    }
    

提交回复
热议问题