Как открыть внешние ссылки непосредственно в браузере приложения (настраиваемая вкладка Chrome), не получая запроса на выбор браузера - PullRequest
0 голосов
/ 22 сентября 2019

Мне нужно открывать внешние ссылки прямо в моем браузере в приложении (настраиваемая вкладка Chrome), не получая приглашения выбрать браузер в моем приложении для просмотра веб-приложений на Android .

Прямо сейчас, если яЯ нажимаю на внешние ссылки в моем приложении, затем он запрашивает у меня выбор любого браузера (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);
            }
        }
    }

Если я ввожу False в "aswm_view(url,true, asw_error_counter);", тогда внешние ссылки открываются в веб-просмотре, чего я не хочу.

Заранее спасибо, и при необходимости я могу поделиться большекод.

РЕДАКТИРОВАТЬ: Я добавил метод aswm_view в соответствии с запросом

1 Ответ

0 голосов
/ 22 сентября 2019

При просмотре метода aswm_view либо ASWP_TAB сбрасывается, либо MainActivity не обнаруживается.

Пожалуйста, внимательно проверьте оба в методе aswm_view.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...