ConnectivityManager getNetworkInfo(int)已弃用

使用compileSdkVersion 23,然而试图支持早在9。

getNetworkInfo(int)在23中已被弃用。build议使用getAllNetworks和getNetworkInfo(Network)来代替。 但是,这两者都需要最低限度的API 21。

是否有一个我们可以在支持包中使用的类,可以帮助这个?

我知道之前提出了一个解决scheme,但是我的最低api要求的挑战是9。

您可以使用:

getActiveNetworkInfo();

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null) { // connected to the internet if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { // connected to wifi Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { // connected to the mobile provider's data plan Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); } } else { // not connected to the internet } 

为了最好的代码重用练习,即兴的奶酪面包答案。

 public static boolean isNetworkAvailable(Context context) { int[] networkTypes = {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI}; try { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); for (int networkType : networkTypes) { NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.getType() == networkType) return true; } } catch (Exception e) { return false; } return false; } 

该代码可以放在Util类中,可以用来检查手机是否通过Wifi或移动互联网从应用程序的任何部分连接到互联网。

记得放

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

在与以上答案的清单文件中。

如奶酪面包build议,使用getActiveNetworkInfo()

getActiveNetworkInfo

在API级别1中添加

NetworkInfo getActiveNetworkInfo()

返回当前活动的默认数据networking的详细信息。 连接时,此networking是传出连接的默认路由。 在启动networking通信之前,您应该始终检查isConnected()。 当没有默认networking时,这可能返回null。 此方法要求调用方拥有权限ACCESS_NETWORK_STATE。 返回NetworkInfo当前默认networking的NetworkInfo对象,如果没有默认networking当前处于活动状态,则返回null。

参考:Android Studio

  public final boolean isInternetOn() { // get Connectivity Manager object to check connection ConnectivityManager connec = (ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE); // Check for network connections if ( connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTED || connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTING ) { // if connected with internet Toast.makeText(this, connec.getActiveNetworkInfo().getTypeName(), Toast.LENGTH_LONG).show(); return true; } else if ( connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED ) { Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show(); return false; } return false; } 

现在调用方法,为了安全使用try catch

  try { if(isInternetOn()){ //connected actions } else{ //not connected actions } }catch (Exception e){ Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } 

不要忘记添加:

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

为了安全起见,我build议也使用方法

NetworkInfo.isConnected()

整个方法可以如下:

 /** * Checking whether network is connected * @param context Context to get {@link ConnectivityManager} * @return true if Network is connected, else false */ public static boolean isNetworkConnected(Context context){ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { int networkType = activeNetwork.getType(); return networkType == ConnectivityManager.TYPE_WIFI || networkType == ConnectivityManager.TYPE_MOBILE; } else { return false; } }