我在
Android Studio工作,我使用WebView处理我的应用程序中的网页.我想跟踪此网页中的网址重定向,以便我能够在正确的时间移动到下一个活动.
可以通过覆盖WebViewClient类方法’shouldOverrideUrlLoading’来执行此URL跟踪,以允许我转发到特定URL的新活动.但是,’shouldOverrideUrlLoading’有两种实现方式:
shouldOverrideUrlLoading(WebView view, String url)
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
第一个(方法结束String url)已弃用.当我希望我的应用程序针对API级别15及更高级别时,上面显示的第二种方法仅适用于API级别21.
我理解这是否只是标准代码(不是方法覆盖)我可以从Android手机中提取API级别,然后根据检索到的级别执行任何方法.但我不知道如何根据手机的API级别为用户指定哪些重载方法.
此外,我得到一个红色波浪形警告我一个调用需要API级别21,但我相信这仍然会编译,只有在API 21以下调用时崩溃?
以下是重写的重载方法的两个版本:
这是不推荐使用的方法:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.equals("test")) {
return true;
}
return false;
}
});
这是该方法的新版本,其中’WebResourceRequest’仅在API级别21中受支持:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if(request.getUrl().equals("test")) {
return true;
}
return false;
}
});
无论如何要么指定在某些API级别使用哪种方法?因为我不知道如何在不使用弃用方法的情况下执行此操作.
最佳答案 只需创建一个同时调用的方法.
像这样的东西
public override bool ShouldOverrideUrlLoading(WebView view, string url)
{
return HandleUrlLoading(view,url);
}
public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
{
string url = request.Url.ToString();
return HandleUrlLoading(view, url);
}
private bool HandleUrlLoading(WebView view, string url)
{
if(url.equals("test")) {
return true;
}
return false;
}