Android-Get Host没有立即返回

时间:2018-11-21 05:25:58

标签: java android android-intent android-webview

我有自己的MyWebViewClient,在我的应用中为我的WebViewClient扩展了webView。我没有制作可能并非所有型号都支持的复杂导航栏,而是在Web视图上实现了自己的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 Studio中的android环境中非常有效。但是,当我将其添加到实时测试设备中时,单击链接试图将它们加载为页面,而不是像在工作室环境中那样触发showSettings事件或注销它们。

在这里我做错了什么,因为在所有设备上都没有获得正确的主机字符串?以防万一,这是我的showSettings函数,可以再次在Studio环境(Nexus 5和Google Pixel 2)中正常运行,我的测试设备是Samsung Galaxy S6 Edge btw

public void openSettingsMenu() {
    Log.e(TAG, "They requested the settings menu");
    isSettingsOpen = true;
    startActivity(new Intent(Browser.this, appSettings.class));
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。显然,在较旧的版本上,您需要重写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;
    }