Подтвердить что ты не робот

Поддержка других протоколов в веб-браузере Android

Я создал приложение для веб-просмотра, на странице, на которой отображаются функции market://links, но после нажатия на них я получаю экран 404 вместе с ошибкой, что протокол не поддерживается. Я попытался просмотреть документацию, но не смог найти что-либо, связанное с этим. Любая помощь очень ценится.

4b9b3361

Ответ 1

Для меня проблема JavaScript не была решением, так как HTML не под моим контролем. Поэтому, если вам нужно управлять этим со стороны приложения, тогда существует относительное простое решение: вывести из WebViewClient и внедрить реализацию с помощью WebView.setWebViewClient(). Все, что вам нужно переопределить в реализации WebViewClient, - это метод shouldOverrideUrlLoading, как показано ниже:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url != null && url.startsWith("market://")) {
        view.getContext().startActivity(
            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        return true;
    } else {
        return false;
    }
}

Для меня это прекрасно работает.

Ответ 2

Для ссылок на работу у вас должно быть установлено приложение на вашем устройстве/эмуляторе. Также ваше приложение должно запросить разрешение на доступ к сети.

UPD: в качестве обходного пути вы можете вызвать java-код из веб-представления, например, если вы создаете такие ссылки:

<a href="javascript:go('market://your.path.to.market.app')">..</a>

Определите функцию javascript с именем go():

<script type="text/javascript">
   function go(link) {
     if (handler) {
           handler.go(link);
         } else {
           document.location = link;
         }
   }
</script>

Затем вы можете передать объект-обработчик в WebView:

webview.addJavascriptInterface(new Handler() {
        @Override
        public void go(String marketUrl) {
                         //start market intent here
        }
    },  "handler");

Интерфейс обработчика может быть определен следующим образом:

   public interface Handler{

    public void go(String url);

}

Ответ 3

НАДЕЖДА ЭТО ПОМОГАЕТ ВАМ

public boolean shouldOverrideUrlLoading(WebView view, String url) 
{
    if (url.startsWith("market://")||url.startsWith("vnd:youtube")||url.startsWith("tel:")||url.startsWith("mailto:"))
    {
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse(url)); 
        startActivity(intent);
        return true;
     }
    else{
        view.loadUrl(url);
        return true;
        }
}

Ответ 4

Работайте со мной:

webView = (WebView) findViewById(R.id.webView);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);

webView.setWebViewClient(new MyWebViewClient());
webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("http://myweb.com");

private class MyWebViewClient extends WebViewClient {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null && url.startsWith("whatsapp://")) {
            view.getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        } else {
            return false;
        }
    }
}

Ответ 5

Важно понимать, как работает веб-просмотр и его клиенты (webviewclient и webchromeclient). Пожалуйста, просмотрите http://therockncoder.blogspot.in/2014/04/understanding-androids-webchromeclient.html

В методе webviewclient shouldOverrideUrlLoading() вы можете решить, хотите ли вы открыть ссылку в новом браузере или в веб-просмотре. Если вы не переопределите этот метод, он по умолчанию откроет ссылку в новом браузере вне вашего приложения для Android. Если вы хотите открыть в webview, переопределите метод, как показано ниже

public boolean shouldOverrideUrlLoading(WebView view, String url) { <br>
    Log.v("activity", "INSIDE WEBVIEW CLIENT ON shouldOverrideUrlLoading");
        view.loadUrl(url);
        return false; //need to understand return value based on usage
    }

Схемы вроде whatsapp://send? text = Hello %20World! или market://details? id = xx.xx.xx автоматически откроет соответствующие приложения, если они открыты за пределами веб-обозревателя, и если это приложение установлено на телефоне.

Если вы хотите открыть определенные ссылки в веб-браузере и определенные схемы вне веб-просмотра, вам необходимо переопределить метод WebChromeClients onCreateWindow(), как описано в приведенной выше ссылке. Он должен решить эту задачу.

Ответ 6

Простейшее решение

 Intent newApp = new Intent(Intent.ACTION_VIEW,  Uri.parse(URL));
startActivity(newApp);