我在Android Studio工作,我正在使用WebView处理我的应用程序中的网页。我想跟踪此网页中的网址重定向,以便我能够在正确的时间转到下一个活动。
此URL跟踪可以通过覆盖WebViewClient类方法来实现' shouldOverrideUrlLoading'允许我转发到特定网址的新活动。但是,有两种实现' shouldOverrideUrlLoading':
shouldOverrideUrlLoading(WebView view, String url)
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
不推荐使用第一个(方法结束String url)。上面显示的第二种方法仅适用于API级别21,当我希望我的应用程序针对API级别15及更高级别时。
我理解这是否只是标准代码(不是方法覆盖)我可以从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级别使用哪种方法?我不知道如何在不使用弃用方法的情况下实现这一目标。
答案 0 :(得分:1)
只需创建一个同时调用的方法。
像这样的东西
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;
}
答案 1 :(得分:0)
你可以放一个检查android版本的条件。
how-can-i-check-the-system-version-of-android
要点:
if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP) {
// only for LOLLIPOP and newer versions
}
总是尝试使用较新的api,因为它们往往会删除错误,但如果你想要旧的弃用方法,你总是可以放置条件。