У меня есть собственный MyWebViewClient
, который расширяет WebViewClient
для моего webView
в моем приложении.Вместо создания сложных навигационных панелей, которые могут поддерживаться не на всех моделях, я добавил в веб-просмотр свою собственную строку USERAGENT
и, используя внутреннюю часть веб-сайта, показываю другую ссылку на странице.Я сделал две ссылки, которые должны запускать события при нажатии.Вот функция, которую я использую для выполнения
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (request.getUrl().getHost().equals("close.app")) {
clearCookiesAndCache();
return false;
}
if (request.getUrl().getHost().equals("showsettings.app")) {
openSettingsMenu();
return true;
}
if (request.getUrl().getHost().equals(SERVER_URL)) {
return false;
}
final Uri uri = request.getUrl();
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return true;
}
Если пользователь посещает строку SERVER_URL
, которая является доменом, который загружает мой webView, мы загружаем новую страницу в webView.Если они нажимают ВНЕШНИЙ веб-адрес (example.com
), такой как notexample.com
, то мы начинаем новое намерение открыть внешнюю ссылку в chrome или другом браузере.
Это работает ОТЛИЧНО в моей среде Androidвнутри Android Studio.Однако когда я добавил это в свое устройство для тестирования в режиме реального времени, нажатие на ссылки пытается загрузить их как страницу, а не запускать событие showSettings или регистрировать их, как это происходит в моей студийной среде.
Что я делаюнеправильно здесь, что он не получает правильную строку хоста на всех устройствах?На всякий случай, вот моя функция showSettings, которая снова работает правильно в среде Studio (Nexus 5 и Google Pixel 2), мое тестовое устройство - Samsung Galaxy S6 Edge, кстати
public void openSettingsMenu() {
Log.e(TAG, "They requested the settings menu");
isSettingsOpen = true;
startActivity(new Intent(Browser.this, appSettings.class));
}
Спасибоза любую помощь.