我在 Android Studio 中工作,我正在使用 WebView 来处理我的应用程序中的网页。我想跟踪此网页中的 URL 重定向,以便在正确的时间转到下一个 Activity 。
可以通过覆盖 WebViewClient 类方法“shouldOverrideUrlLoading”来执行此 URL 跟踪,以允许我转发到特定 URL 的新 Activity 。但是,“shouldOverrideUrlLoading”有两种实现方式:
shouldOverrideUrlLoading(WebView view, String url)
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
其中第一个(方法结束字符串 url)已被弃用。当我希望我的应用程序以 API 级别 15 及更高级别为目标时,上面显示的第二种方法仅适用于 API 级别 21 之后。
我知道如果这只是标准代码(不是方法覆盖),我可以从 Android 手机中提取 API 级别,然后根据检索到的级别执行任何方法。但我不确定如何根据手机的 API 级别向用户指定这些重载方法中的哪些。
我还收到一个红色的波浪形警告,警告我 a 调用需要 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 级别使用哪种方法?因为我不确定如何在不使用已弃用的方法的情况下执行此操作。
最佳答案
你可以只放一个条件检查android版本。
how-can-i-check-the-system-version-of-android
总结:
如果(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP){
//仅适用于 LOLLIPOP 和更新版本
}
始终尝试使用较新的 API,因为它们往往会消除错误,但如果您想要旧的已弃用方法,您始终可以设置条件。
关于java - 为了向后兼容,如何覆盖不推荐使用的重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41120335/