Отключение ссылок WebView работает на эмуляторе, но нет на устройстве

Я хочу отключить ссылки на страницу, которую загружаю в мой объект WebView. Мой код отлично работает на моем эмуляторе с api 25, но не на моем телефоне с 23 api.

Это код, который блокирует ссылки моего WebView:

public class NoLinksWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return true; } } 

Я устанавливаю свой WebViewClient как объект типа NoLinksWebViewClient. Это трюк на эмуляторе, но не на моем реальном телефоне.

Как это решить?

Мой код отлично работает на моем эмуляторе с api 25, но не на моем телефоне с 23 api.

Я думаю, что решающее различие заключается не в эмуляторе и не в устройствах, а в разных уровнях API. Если вы посмотрите на документацию на WebViewClient, вы заметите, что есть два похожих, но разных метода:

 // since API 24 boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) // before API 24, now deprecated boolean shouldOverrideUrlLoading(WebView view, String url) 

Поскольку вы переопределили только более новый метод, на вашем более старом устройстве работает логика по умолчанию. Это происходит потому, что, очевидно, устройство API 23 не может знать, что в API 24 этот метод будет заменен другим, поэтому он по-прежнему вызывает старый (теперь устаревший) метод.

Я считаю, что для исправления проблемы вы просто должны переопределить оба этих метода.

Короткий ответ: вам нужно переопределить оба метода, приведенные ниже. Метод toOverrideUrlLoading (WebView view, String url) устарел в API 24, и в API 24 добавлен метод requestOverrideUrlLoading (WebView view, WebResourceRequest) .

  @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return true; } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return true; } 

Надеюсь, они вам помогут.

Является ли javafx.scene.Node.setDisable(boolean arg0) опцией? Таким образом, вы можете блокировать использование элементов

Документация

Intereting Posts
Как обнаружить Android-устройство – 64-битный или 32-битный процессор? String timestamp to Calendar в Java? Создание анимации сканирования с использованием студии Android Поддерживает ли эмулятор Android OpenGL ES 3.0? Каков правильный способ поддержки разных размеров планшета? ResourceNotFoundException – Идентификатор ресурса строки Как получить IP-адрес эмулятора Android? Как изменить ориентацию экрана (программно) на «Обратный пейзаж» с помощью appium (драйвер selenium) Как обращаться с полномочиями SYSTEM_ALERT_WINDOW, которые не предоставляются автоматически на некоторых устройствах с предварительным указателем Marshmallow Цель не должна быть пустой, используя библиотеку Пикассо Как избежать CollapsingToolbarLayout, не будучи разбитым или «неустойчивым» при прокрутке? Как я могу получить координатную точку по радиусу с другой координатой и расстоянием в Km? Android: NullPointerException: попытка вызвать виртуальный метод «int android.graphics.Bitmap.getWidth ()» в ссылке на нулевой объект WebView ZoomButtonsController Как получить завершение кода стиля Eclipse в Android Studio