为了向后兼容,如何覆盖不推荐使用的重载方法?

Cal*_*lco 5 java android overriding deprecated android-webview

我在Android Studio中工作,正在使用WebView处理应用程序中的网页。我想跟踪此网页内的URL重定向,以便在正确的时间转到下一个活动。

可以通过重写WebViewClient类方法“ shouldOverrideUrlLoading”来执行此URL跟踪,以允许我转发到特定URL的新活动。但是,“ shouldOverrideUrlLoading”有两种实现:

shouldOverrideUrlLoading(WebView view,  String url)
shouldOverrideUrlLoading(WebView view,  WebResourceRequest request)
Run Code Online (Sandbox Code Playgroud)

不推荐使用第一个(方法以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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

这是该方法的新版本,其中“ 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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

无论如何,是否可以指定在某些API级别使用哪种方法?因为我不确定如何仅使用不推荐使用的方法来执行此操作。

小智 1

You can just put a condition checking android version.

how-can-i-check-the-system-version-of-android

Summary:

if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP) { // only for LOLLIPOP and newer versions }

Always try to use newer api's as they tend to remove bugs but if you want old deprecated methods you can always put condition.