Вопрос

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

Это было полезно?

Решение

Для меня штука 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;
    }
}

Для меня это работает нормально.

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

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

UPD: Как обходной путь вы можете позвонить в код Java в рамках WebView, например, если вы генерируете такие ссылки:

<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.addJavascriptInterface(new Handler() {
        @Override
        public void go(String marketUrl) {
                         //start market intent here
        }
    },  "handler");

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

   public interface Handler{

    public void go(String url);

}

Надеюсь, это поможет вам

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;
        }
}

Работа для меня:

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;
        }
    }
}

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

В методе WebViewClient's DovoverrideurLoading (), вы можете решить, хотите ли вы открыть ссылку в новом браузере или в WebView. Если вы не переопределите этот метод, он по умолчанию откроет ссылку в новом браузере вне вашего приложения 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: // отправить? Текст = привет% 20World! или Рынок: // Детали? ID = xx.xx.xx Открою соответствующие приложения автоматически, если они открываются за пределами WebView, и если это приложение установлено на телефоне.

Если вы хотите открыть определенные ссылки в WebView и специфические схемы снаружи WebView, вам необходимо переопределить метод WebchRomEclients OnCreatewindow (), как описано в ссылке, представленной выше. Это должно решить цель.

Вместо добавления проверки на определенную схему, модифицируя решение @sven, это будет работать для всех схем

public boolean shouldOverrideUrlLoading(WebView view, String url) {
 String host= Uri.parse(url).getHost();
 if (host == null) {
    view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
    return true;
   }

   view.loadUrl(url);
   return false;
 }

Прошедшее решение

 Intent newApp = new Intent(Intent.ACTION_VIEW,  Uri.parse(URL));
startActivity(newApp);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top