【问题标题】:Import deprecated warning after updating target sdk to 29将目标 sdk 更新为 29 后导入不推荐使用的警告
【发布时间】:2021-04-08 22:18:56
【问题描述】:

build.gradle 中将编译和targetSdkVersion 更新为“29”后我收到弃用警告:

warning: [deprecation] NetworkInfo in android.net has been deprecated
import android.net.NetworkInfo;
                  ^

因此构建失败。但我使用网络信息与 api 版本 16-29 兼容。我应该如何处理针对 api“29”及更高版本的已弃用导入?

【问题讨论】:

  • 如果是警告,那么它不应该使构建失败。
  • @Kiryl Build 在我的情况下也失败了。如果您解决了此问题,请发布解决方案。
  • 您计划支持的旧版本 Android 是什么?

标签: java android deprecated


【解决方案1】:

我找到了解决方案。你必须这样写方法。

@SuppressWarnings("deprecation")
public boolean isConnected() {
        ConnectivityManager cm = (ConnectivityManager) AnkiDroidApp.getInstance().getApplicationContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm == null) {
            return false;
        }
        /* NetworkInfo is deprecated in API 29 so we have to check separately for higher API Levels */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            Network network = cm.getActiveNetwork();
            if (network == null) {
                return false;
            }
            NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(network);
            if (networkCapabilities == null) {
                return false;
            }
            boolean isInternetSuspended = !networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED);
            return networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                    && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
                    && !isInternetSuspended;
        } else {
            android.net.NetworkInfo networkInfo = cm.getActiveNetworkInfo();
            return networkInfo != null && networkInfo.isConnected();
        }
    }

记得取消警告。

【讨论】:

    【解决方案2】:

    你的问题的答案在这个 Link

    NetworkCapabilities 在 API 29 中没有被弃用,但它需要 API 21,所以我只在 API 29 上调用了它。

    public static boolean isNetworkAvailable(Context context) {
    if(context == null)  return false;
    
    
    ConnectivityManager connectivityManager = (ConnectivityManager) 
    
    context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        if (connectivityManager != null) {
    
    
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                NetworkCapabilities capabilities = 
    
     connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
                if (capabilities != null) {
                    if 
                    (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                        return true;
                    } else if 
                     (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                        return true;
                    }  else if 
                     (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)){
                        return true;
                    }
                }
            }
    
        else {
    
            try {
                NetworkInfo activeNetworkInfo = 
                   connectivityManager.getActiveNetworkInfo();
                if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
                    Log.i("update_statut", "Network is available : true");
                    return true;
                }
            } catch (Exception e) {
                Log.i("update_statut", "" + e.getMessage());
            }
        }
    }
        Log.i("update_statut","Network is available : FALSE ");
        return false;
    }
    

    【讨论】:

    • 但是我用的是同样的方法,我在导入行收到警告的问题
    • 您可以忽略该警告,这不会导致任何问题。
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 2020-01-31
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2019-09-21
    相关资源
    最近更新 更多