Android ERR_UNKOWN_URL_SCHEME

Я пытаюсь обработать ссылки whatsapp://, sms: и mailto: в веб-просмотре из-за кнопки «Поделиться» на моем веб-сайте. Каждый раз, когда я нажимаю «Поделиться» и выбираю один из вариантов, я получаю сообщение об ошибке ERR_UNKOWN_URL_SCHEME, и оно не открывает другое приложение, которое я выбрал.

Я попробовал большинство ответов StackOverflow, и, похоже, ничего не работает.

Я добавил несколько сообщений Toast, но они тоже не отображаются.

Как я могу заставить эти ссылки начать свою деятельность и сделать внешние URL-адреса «_blank» открытыми во внешнем браузере в моем приложении?

Мой код:

package wai.govgymappnew;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.URLUtil;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // AdMob banner ad test id: ca-app-pub-3940256099942544/6300978111
        MobileAds.initialize(this, "ca-app-pub-3940256099942544/6300978111");
        AdView mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

        WebView webview = findViewById(R.id.webview);
        WebSettings webSettings = webview.getSettings();
        webview.getSettings().setUseWideViewPort(true);
        webview.getSettings().setLoadWithOverviewMode(false);
        webview.setInitialScale(100);
        webSettings.setJavaScriptEnabled(true);


        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (URLUtil.isNetworkUrl(url)) {
                    return false;
                }
                if (appInstalledOrNot(url)) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                } else {
                    Toast.makeText(MainActivity.this, "No activity found", Toast.LENGTH_LONG).show();
                }
                return true;
            }

            private boolean appInstalledOrNot(String uri) {
                PackageManager pm = getPackageManager();
                try {
                    pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
                    return true;
                } catch (PackageManager.NameNotFoundException e) {
                    Toast.makeText(MainActivity.this, "No activity found", Toast.LENGTH_LONG).show();
                }

                return false;
            }
        });

        if (savedInstanceState == null) {
            webview.setWebViewClient(new WebViewClient());
            webview.loadUrl("https://myurl.com");
        }

    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        WebView webview = findViewById(R.id.webview);

        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_BACK:
                    if (webview.canGoBack()) {
                        webview.goBack();
                    } else {
                        finish();
                    }
                    return true;
            }

        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        WebView webview = findViewById(R.id.webview);

        super.onSaveInstanceState(outState);
        webview.saveState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        WebView webview = findViewById(R.id.webview);

        super.onRestoreInstanceState(savedInstanceState);
        webview.restoreState(savedInstanceState);
    }

}

Вам может понадобиться этот ответ, чтобы решить вашу проблему: stackoverflow.com/a/41693364/6266501

Nurlan Shukurov 11.03.2019 12:32

Это именно то, что я получил в своем коде и, к сожалению, не работает.

user9745009 11.03.2019 12:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
277
0

Другие вопросы по теме