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; } }