android 如何检查网络连接状态,是android开发中一个常见的问题。

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

<span style="font-size:24px;"><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> </span>
1)判断是否有网络连接
<span style="font-size:24px;">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; } </span>

2)判断WIFI网络是否可用

<span style="font-size:24px;">public boolean isWifiConnected(Context context) {    if (context != null) {          ConnectivityManager mConnectivityManager = (ConnectivityManager) context       .getSystemService(Context.CONNECTIVITY_SERVICE);         NetworkInfo mWiFiNetworkInfo = mConnectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); //WIFI        if (mWiFiNetworkInfo != null) {           return mWiFiNetworkInfo.isAvailable();           }       }       return false; } </span>
3)判断MOBILE网络是否可用

<span style="font-size:24px;">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; } </span>
4)获取当前网络连接的类型信息
<span style="font-size:24px;">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; } </span>
开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。

ConnectivityManager有四个主要任务:
1、监听手机网络状态(包括GPRS,WIFI, UMTS等)
2、手机状态发生改变时,发送广播
3、当一个网络连接失败时进行故障切换
4、为应用程序提供可以获取可用网络的高精度和粗糙的状态

当我们要在程序中监听网络状态时,只要一下几个步骤即可:
1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观

<span style="font-size:24px;">onnectionReceiver = 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         }     } }; </span>
2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:
<span style="font-size:24px;">IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(connectionReceiver, intentFilter); </span>

3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:
<span style="font-size:24px;">if (connectionReceiver != null) {   unregisterReceiver(connectionReceiver); } </span>
在测试中遇到过这样的状况,将一个当前连接wifi的路由设备关闭,但是程序并没有捕捉到unconnect network,可能是因为手机设备立刻连接另一个路由设备了

Android 监控网络状态

<span style="font-size:24px;">public static boolean isNetworkAvailable(Context context) {       ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);     if (connectivity == null) {        Log.i("NetWorkState", "Unavailabel");         return false;       } else {         NetworkInfo[] info = connectivity.getAllNetworkInfo();         if (info != null) {         for (int i = 0; i < info.length; i++) {           if (info[i].getState() == NetworkInfo.State.CONNECTED) {           Log.i("NetWorkState", "Availabel");           return true;          }       }      }    }     return false; } </span>

上面这个方法就是判断网络是否连接的代码,返回true表示有网络,返回false表示无网络。 在Android网络应用程序开发中,经常要判断网络连接是否可用,因此经常有必要监听网络状态的变化。android的网络状态监听可以用BroadcastReceiver来接收网络状态改变的广 播,具体实现如下

<span style="font-size:24px;">@Override public void onReceive(Context context, Intent intent) {    Log.e(TAG, "网络状态改变");    boolean success = false;   //获得网络连接服务     ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);     // State state = connManager.getActiveNetworkInfo().getState();     State state = connManager.getNetworkInfo( ConnectivityManager.TYPE_WIFI).getState(); // 获取网络连接状态     if (State.CONNECTED == state) { // 判断是否正在使用WIFI网络      success = true;       }      state = connManager.getNetworkInfo(      ConnectivityManager.TYPE_MOBILE).getState(); // 获取网络连接状态      if (State.CONNECTED != state) { // 判断是否正在使用GPRS网络        success = true;      }      if (!success) {       Toast.makeText(LocationMapActivity.this, "您的网络连接已中断", Toast.LENGTH_LONG).show();      } } </span>
<span style="font-size:24px;">/注册网络监听 IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(mNetworkStateReceiver, filter); //在Activity中的onDestroy中:' unregisterReceiver(mNetworkStateReceiver); //取消监听 </span>
很多朋友在android开发中,都会遇到手机网络类型判断,因为就目前的android平台手机来说:可能会存在4中状态
1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)
2.使用WIFI上网
3.CMWAP(中国移动代理)
4.CMNET上网
这四种状态,如果没有网络,肯定是无法请求Internet了,如果是wap就需要为手机添加中国移动代理,关于为手机添加中国移动的代理!
下面是网络判断的方法:

<span style="font-size:24px;">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; } </span>




更多相关文章

  1. Android(安卓)禁止状态栏下拉
  2. Android+Listview+分页+动态加载网络数据
  3. Android获取手机应用程序包的信息
  4. Android之网络操作 - 从网络获取图片或网页
  5. Professional Android(安卓)2 Development - 0
  6. TCPDUMP抓取android手机流量包+wireshark分析
  7. android通讯录根据手机号码查询姓名
  8. 【Android】Android(安卓)手机连接 Win7 蓝牙
  9. android sd卡状态、路径、可用空间,内存

随机推荐

  1. Android 基础面试题目
  2. 最全的Android项目结构以及功能
  3. Android去除EditText的聚焦Focuse
  4. Android(安卓)安卓微信分享
  5. Android ActionBar的源代码分析(二)
  6. Android活动Acitivity启动模式之singleTa
  7. Android 实现答题器功能(通过手势实现翻页
  8. android之Activity
  9. android自定义控件:可旋转View:可作为Image
  10. Android(安卓)DSL简介