Android Webview, сделать URL открытыми в другом браузере - PullRequest
7 голосов
/ 15 декабря 2011

когда я нажимаю на ссылки в моем приложении, они открываются в одном веб-представлении.Я хочу, чтобы они открывались во внешнем браузере.

Я сделал это:

myWebView.setWebViewClient(new WebViewClient()
{
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    return false;
                }

});

возвращение false приводит к загрузке в том же веб-просмотре, а возвращение "true" ничего не дает, когда ссылканажата.

Я смотрел на другие вопросы, но кажется, что у всех есть прямо противоположная проблема.(они хотят ссылки для загрузки в свое приложение)

что я делаю не так?

Ответы [ 2 ]

12 голосов
/ 15 декабря 2011

В вашем WebViewClient

@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url){
    if (loadUrlExternally){
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
        return true; //the webview will not load the URL
    } else {
        return false; //the webview will handle it
    }
}

Таким образом он открывает новое окно браузера так же, как и любое другое приложение.

1 голос
/ 18 апреля 2012

Вот более полный ответ. Примечание: я звоню из фрагмента, следовательно, getActivity () перед startActivity ()

    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, final String url)
    {
        //check if the url matched the url loaded via webview.loadUrl()
        if (checkMatchedLoadedURL(url))
        {
            return false;
        } else
        {
            getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }

/**
     * used to check if the loaded url matches the base url loaded by the fragment(mUrl)
     * @param loadedUrl
     * @return true if matches | false if doesn't or either url is null
     */
    private boolean checkMatchedLoadedURL(String loadedUrl)
    {
        if (loadedUrl != null && mUrl != null)
        {
            // remove the tailing space if exisits
            int length = loadedUrl.length();
            --length;
            char buff = loadedUrl.charAt(length);
            if (buff == '/')
            {
                loadedUrl = loadedUrl.substring(0, length);
            }

            // load the url in browser if not the OTHER_APPS_URL
            return mUrl.equalsIgnoreCase(loadedUrl);
        }
        return false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...