Открыть ссылку в браузере Android (WebView) - PullRequest
0 голосов
/ 12 сентября 2018

Недавно я реализовал метод shouldInterceptRequest, чтобы определить, когда щелкнула ссылка "http://sitemercado.com.br/valida", чтобы открыть ее в браузере Android вместо внутреннего открытия в веб-представлении, пока она не заработала, ссылка открывается в браузере, но когда я прихожуназад для приложения веб-просмотра, оно также загружено, я хотел бы, чтобы оно загружалось только в браузере.

Мой код следующий:

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

        pb = (findViewById(R.id.pb));
        mWebView = findViewById(R.id.webview);
        mWebView.setListener(this, this);
        mWebView.loadUrl("https://www.sitemercado.com.br/frade");
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                Intent i = new Intent(MainActivity.this, off.class);
                startActivity(i);
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                finish();
            }
        });

        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (Uri.parse(url).getHost().equals("www.sitemercado.com.br/valida")) {
                    return true;

                }
                String valida = "https://www.sitemercado.com.br/valida";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(valida));
                startActivity(i);
                Toast.makeText(getApplicationContext(), "1Detectou", Toast.LENGTH_SHORT).show();

                return false;
                }
        });

Куда я иду не так?

1 Ответ

0 голосов
/ 12 сентября 2018

Если я не ошибаюсь, следующее неверно:

    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals("www.sitemercado.com.br/valida")) {
                return true;

            }
            String valida = "https://www.sitemercado.com.br/valida";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(valida));
            startActivity(i);
            Toast.makeText(getApplicationContext(), "1Detectou", Toast.LENGTH_SHORT).show();

            return false;
        }
    });

Вы получаете хост URL, а затем сравниваете его с полным URL.Это никогда не будет равным.

Тогда вы запускаете ссылку, только если это утверждение ложно?Это перевернуто, поскольку вы говорите в своем вопросе, что хотите, чтобы он запускался в браузере, только если URL-адрес /valida.В зависимости от того, какой URL вы пытаетесь загрузить, Android запустит браузер, указывающий на /valida.

Попробуйте вместо этого:

    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getPath().contains("valida")) {
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
                Toast.makeText(getApplicationContext(), "1Detectou", Toast.LENGTH_SHORT).show();

                return true;
            }

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