重载多个API级别的函数

时间:2016-09-01 13:15:18

标签: android android-webview

我试图重载一个函数(WebViewClient.shouldOverrideUrlLoading()是特定的)。我的targetSdkVersion为24,minSdkVersion为15.这些值是故意选择的,因为这个应用程序是一个"实验"并且将成为具有所述目标和最小SDK版本的更大的一部分。 我已经在developer.android.com上阅读了Supporting different platforms。根据文档,前面提到的函数有两个不同的签名。一个参数类型为WebViewWebRessourceRequest,另一个参数类型为WebViewString。后一个用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){...}
    }
}

1 个答案:

答案 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,则无需担心。在旧设备上,只会调用已弃用的函数。这些设备对新功能一无所知。 新设备将调用新功能。