我需要直接在我的应用内浏览器(Chrome自定义标签)中打开外部链接,而无需提示在我的android webview应用中选择浏览器。

现在,如果我单击应用程序中的外部链接,则会提示我并要求我选择任何浏览器(Chrome,Opera,Edge)。如果我单击chrome,则会在应用程序内的Chrome自定义标签中打开链接,但我希望提示不出现,并且链接应直接在Chrome自定义标签中打开(就像在Instagram,FB等上发生的那样)

/*--- actions based on URL structure ---*/

    public boolean url_actions(WebView view, String url){
        boolean a = true;
        // show toast error if not connected to the network
        if (!ASWP_OFFLINE && !DetectConnection.isInternetAvailable(MainActivity.this)) {
            Toast.makeText(getApplicationContext(), getString(R.string.check_connection), Toast.LENGTH_SHORT).show();

        // use this in a hyperlink to redirect back to default URL :: href="refresh:android"
        } else if (url.startsWith("refresh:")) {
            String ref_sch = (Uri.parse(url).toString()).replace("refresh:","");
            if(ref_sch.matches("URL")){
                CURR_URL = ASWV_URL;
            }
            pull_fresh();

        // use this in a hyperlink to launch default phone dialer for specific number :: href="tel:+919876543210"
        } else if (url.startsWith("tel:")) {
            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
            startActivity(intent);

        // use this to open your apps page on google play store app :: href="rate:android"
        } else if (url.startsWith("rate:")) {
            final String app_package = getPackageName(); //requesting app package name from Context or Activity object
            try {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + app_package)));
            } catch (ActivityNotFoundException anfe) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + app_package)));
            }

        // sharing content from your webview to external apps :: href="share:URL" and remember to place the URL you want to share after share:___
        } else if (url.startsWith("share:")) {
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_SUBJECT, view.getTitle());
            intent.putExtra(Intent.EXTRA_TEXT, view.getTitle()+"\nVisit: "+(Uri.parse(url).toString()).replace("share:",""));
            startActivity(Intent.createChooser(intent, getString(R.string.share_w_friends)));

        // use this in a hyperlink to exit your app :: href="exit:android"
        } else if (url.startsWith("exit:")) {
            aswm_exit();

        // getting location for offline files
        } else if (url.startsWith("offloc:")) {
            String offloc = ASWV_URL+"?loc="+get_location();
            aswm_view(offloc,false, asw_error_counter);
            Log.d("OFFLINE LOC REQ",offloc);

        // creating firebase notification for offline files
        } else if (url.startsWith("fcm:")) {
            String fcm = ASWV_URL+"?fcm="+fcm_token();
            aswm_view(fcm,false, asw_error_counter);
            Log.d("OFFLINE_FCM_TOKEN",fcm);

        // opening external URLs in android default web browser
        } else if (ASWP_EXTURL && !aswm_host(url).equals(ASWV_HOST) && !url.contains("oauth"))  {
            aswm_view(url,true, asw_error_counter);

        // else return false for no special action
        } else {
            a = false;
        }
        return a;
    }


//Opening URLs inside webview with request
    void aswm_view(String url, Boolean tab, int error_counter) {
        if(error_counter > 2){
            asw_error_counter = 0;
            aswm_exit();
        }else {
            if(tab){
                if(ASWP_TAB) {
                    CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
                    intentBuilder.setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary));
                    intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
                    intentBuilder.setStartAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
                    intentBuilder.setExitAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
                    CustomTabsIntent customTabsIntent = intentBuilder.build();
                    try {
                        customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));
                    } catch (ActivityNotFoundException e) {
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse(url));
                        startActivity(intent);
                    }
                }else{
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(url));
                    startActivity(intent);
                }
            } else {
                if (url.contains("?")) { // check to see whether the url already has query parameters and handle appropriately.
                    url += "&";
                } else {
                    url += "?";
                }
                url += "rid=" + random_id();
                asw_view.loadUrl(url);
            }
        }
    }


如果我在“ aswm_view(url,true, asw_error_counter);”中输入False,则外部链接会在Webview中打开,我不想发生这种情况。

在此先感谢您,如果需要,我可以共享更多代码。

编辑:我根据要求添加了aswm_view方法

最佳答案

通过查看您的aswm_view方法,ASWP_TAB变为假或找不到MainActivity。

请在aswm_view方法中仔细检查两者。

10-08 00:28