Android网络状态判断与处理

龙旋

共 5583字,需浏览 12分钟

 ·

2021-04-13 10:49

在项目的开发过程中 , 我们的应用程序都是在有网络的情况下进行处理的 , 但我们也要考虑到在没有网络的情况下,应用会出现什么样的情况 , 所以我们需要获取到当前的网络信息.


获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。

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


1)判断是否有网络连接

public boolean isNetworkConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }       return false;   }  


2)判断WIFI网络是否可用

public boolean isWifiConnected(Context context) {       if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mWiFiNetworkInfo = mConnectivityManager                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);            if (mWiFiNetworkInfo != null) {                return mWiFiNetworkInfo.isAvailable();            }       }       return false;   }  


3)判断MOBILE网络是否可用

 public boolean isMobileConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mMobileNetworkInfo = mConnectivityManager                    .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);            if (mMobileNetworkInfo != null) {                return mMobileNetworkInfo.isAvailable();            }       }       return false;   }  


4)获取当前网络连接的类型信息

public static int getConnectedType(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {                return mNetworkInfo.getType();           }        }       return -1;   }  


在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。


ConnectivityManager有四个主要任务:


1、监听手机网络状态(包括GPRS,WIFI, UMTS等) 

2、手机状态发生改变时,发送广播 

3、当一个网络连接失败时进行故障切换 

4、为应用程序提供可以获取可用网络的高精度和粗糙的状态


当我们要在程序中监听网络状态时,只要一下几个步骤即可:


1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观

connectionReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) { Log.i(TAG, "unconnect"); // unconnect network }else {
// connect network } }  };


2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:

IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(connectionReceiver, intentFilter);


3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:

if (connectionReceiver != null) {   unregisterReceiver(connectionReceiver);}


很多朋友在android开发中,都会遇到手机网络类型判断,因为就目前的android平台手机来说:可能会存在4种状态:


  1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)


  2.使用WIFI上网


  3.CMWAP(中国移动代理)


  4.CMNET上网


这四种状态,如果没有网络,肯定是无法请求Internet了,如果是wap就需要为手机添加中国移动代理.


下面是网络判断的方法:

 /**       * 获取当前的网络状态  -1:没有网络  1:WIFI网络2:wap网络3:net网络    */     public static int getAPNType(Context context){
int netType = -1;
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
         if(networkInfo==null){              return netType;  }
int nType = networkInfo.getType();
if(nType==ConnectivityManager.TYPE_MOBILE){
Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo());
             if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){  netType = CMNET;              }              else{                 netType = CMWAP;              }          }  else if(nType==ConnectivityManager.TYPE_WIFI){
             netType = WIFI;          }          return netType;      } 


因为获取的是服务对象,所以这个网络状态都是时时刷新的,所以我们只需要得到网络状态就可以了!


浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报