我试图重载一个函数(WebViewClient.shouldOverrideUrlLoading()
是特定的)。我的targetSdkVersion为24,minSdkVersion为15.这些值是故意选择的,因为这个应用程序是一个"实验"并且将成为具有所述目标和最小SDK版本的更大的一部分。
我已经在developer.android.com上阅读了Supporting different platforms。根据文档,前面提到的函数有两个不同的签名。一个参数类型为WebView
和WebRessourceRequest
,另一个参数类型为WebView
和String
。后一个用api level 24弃用了。
所以我的问题是:我应该覆盖和使用哪一个?较新的(带有请求对象)以确保长期兼容性,或者旧的,已弃用的可能在未来的API中被删除?或者我可以而且应该覆盖两者吗?
修改 所以我需要像这样的伪代码:
public class MyWebViewClient extends WebViewClient{
if(**API level of device is higher than 24**){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebRessourceRequest request){...}
}else{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){...}
}
}
答案 0 :(得分:1)
您应该支持这两种实现,以定位您应用的大量客户端:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
WebResourceRequest webResourceRequest = new WebResourceRequest() {
@Override
public Uri getUrl() {
return url;
}
/*Implement other methods*/
};
webViewClient.shouldOverrideUrlLoading(webView, webResourceRequest);
} else {
webViewClient.shouldOverrideUrlLoading(webView, url);
}
修改强> 如果要覆盖WebViewClient,则无需担心。在旧设备上,只会调用已弃用的函数。这些设备对新功能一无所知。 新设备将调用新功能。