Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-Get-Host-isn';他没有始终如一地回来_Java_Android_Android Intent_Android Webview - Fatal编程技术网

Java Android-Get-Host-isn';他没有始终如一地回来

Java Android-Get-Host-isn';他没有始终如一地回来,java,android,android-intent,android-webview,Java,Android,Android Intent,Android Webview,我有自己的mywebview客户端,它在我的应用程序中为我的webView扩展了webView客户端。我在webview上实现了自己的USERAGENT字符串,并使用网站的后端,在页面上显示了一个不同的链接,而不是制作所有型号都不支持的复杂导航栏。我做了两个链接,当点击时应该触发事件。下面是我用来实现这一点的函数 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest r

我有自己的
mywebview客户端
,它在我的应用程序中为我的
webView
扩展了
webView客户端
。我在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;
    }
如果用户访问
服务器\u URL
字符串,这是我的webView加载的域,那么我们将在webView中加载新页面。如果他们在网址(
example.com
)之外单击,例如
notexample.com
,那么我们将开始一个新的意图,在chrome或其他浏览器中打开外部链接

这在android Studio内的android环境中非常有效。然而,当我将其添加到我的实时测试设备时,单击链接是试图将其作为页面加载,而不是像在我的studio环境中那样触发showSettings事件或将其注销

我在这里做错了什么,没有在所有设备上获得正确的主机字符串?以防万一,这里是我的showSettings功能,它在Studio环境(Nexus 5和Google Pixel 2)中也能正常启动,我的测试设备是三星Galaxy S6 Edge btw

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

谢谢你的帮助。

我解决了这个问题。显然,在旧版本上,您需要覆盖字符串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;
    }