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

标签 java android android-webview overriding deprecated

我在 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/

相关文章:

java - 为什么水平滚动条不适用于我的 JTextArea?

java - 如何在 Looper.getMainLooper 中运行的代码上使用 Mockito 的验证?

java - 简单 XML : ValueRequiredException

Android - 如何访问 WebView 中的本地存储值?

android - WebView 崩溃导致整个应用程序崩溃

Java在Windows中访问 "Video Controller"

java - JavaFX Triangle Mesh Pyramid - 它有效,但为什么呢?

java - 通过 InvokeLater 的多个动画 - Java

android - 在 Android 中从 WiFi 检索供应商特定信息

具有 WebView 的 Android ViewPager 未显示具有样式的嵌入图像