Android getAllNetworkInfo() 已弃用。什么是替代方案?

标签 android networking android-6.0-marshmallow

我想使用 ConnectivityManager 提供 getAllNetworkInfo() 方法来检查 Android 中的网络可用性。此方法在 API 级别 23 中已弃用。开发人员文档建议改用 getAllNetworks()。我尝试过,但无法从旧代码中获得确切的功能。请有人指导我如何使用 getAllNetworks() 方法?

 public boolean isConnectingToInternet(){
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity != null) 
      {
          @SuppressWarnings("deprecation")
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
          //use getAllNetworks() instead
          if (info != null) 
              for (int i = 0; i < info.length; i++) 
                  if (info[i].getState() == NetworkInfo.State.CONNECTED)
                  {
                      return true;
                  }
      }
      return false;
}

最佳答案

当我更新已弃用的代码但仍想支持向后 Api 时。我用这个:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.WANTED API VERSION){
//code
}else{
//code
}

通过这种方式,每个设备都为其使用适当的代码。 示例:

public class ConnectionDetector {

    private Context mContext;

    public ConnectionDetector(Context context) {
        this.mContext = context;
    }
    /**
     * Checking for all possible internet providers
     * **/
    public boolean isConnectingToInternet() {
        ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Network[] networks = connectivityManager.getAllNetworks();
            NetworkInfo networkInfo;
            for (Network mNetwork : networks) {
                networkInfo = connectivityManager.getNetworkInfo(mNetwork);
                if (networkInfo.getState().equals(NetworkInfo.State.CONNECTED)) {
                    return true;
                }
            }
        }else {
            if (connectivityManager != null) {
                //noinspection deprecation
                NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
                if (info != null) {
                    for (NetworkInfo anInfo : info) {
                        if (anInfo.getState() == NetworkInfo.State.CONNECTED) {
                            LogUtils.d("Network",
                                    "NETWORKNAME: " + anInfo.getTypeName());
                            return true;
                        }
                    }
                }
            }
        }
        Toast.makeText(mContext,mContext.getString(R.string.please_connect_to_internet),Toast.LENGTH_SHORT).show();
        return false;
    }
}

关于Android getAllNetworkInfo() 已弃用。什么是替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32242384/

相关文章:

c# - C#测试Socket是否连接

Java 套接字不会在死套接字上抛出异常?

python - 使用python套接字在两台计算机之间进行通信

android - 棉花糖中的上下文

android - 用户 Android M 在应用程序中授予的权限

android - 在 Android 4.4 的 Android 设备上将 CardView 膨胀为 Recyclerview 时出现 InflateException

java - 更多线程还是空循环?

android - WordPress 博客 Android 应用

java - 如何在 8 秒内完成 Ads_Fullscreen Activity 并在之后执行 MainActivity?

Android M 权限安装/更新行为