我有自己的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));
}
感谢您的帮助。
答案 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;
}