Android - Get Host не возвращается случайно - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть собственный 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));
}

Спасибоза любую помощь.

1 Ответ

0 голосов
/ 21 ноября 2018

Я решил проблему.Очевидно, в старых версиях вам нужно переопределить String Url вместо webresourcerequest.Как только я перешел на строковую версию, она начала работать.Я не уверен, какая версия устарела, поэтому я буду использовать эту, так как она, кажется, работает сейчас.Вот обновленный рабочий код!

   @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        super.shouldOverrideUrlLoading(view, url);
        if (Uri.parse(url).getHost().equals("close.app")) {
            clearCookiesAndCache();
            return true;
        }
        if (Uri.parse(url).getHost().equals("showsettings.app")) {
            openSettingsMenu();
            return true;
        }
        if (Uri.parse(url).getHost().equals(SERVER_URL)) {
            return false;
        }
        final Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
        return true;
    }
...