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

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

1)判断是否有网络连接

 1 public boolean isNetworkConnected(Context context) {   2     if (context != null) {   3         ConnectivityManager mConnectivityManager = (ConnectivityManager) context   4                 .getSystemService(Context.CONNECTIVITY_SERVICE);   5         NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();   6         if (mNetworkInfo != null) {   7             return mNetworkInfo.isAvailable();   8         }   9     }  10     return false;  11 }  

2)判断WIFI网络是否可用

 1 public boolean isWifiConnected(Context context) {   2     if (context != null) {   3         ConnectivityManager mConnectivityManager = (ConnectivityManager) context   4                 .getSystemService(Context.CONNECTIVITY_SERVICE);   5         NetworkInfo mWiFiNetworkInfo = mConnectivityManager   6                 .getNetworkInfo(ConnectivityManager.TYPE_WIFI);   7         if (mWiFiNetworkInfo != null) {   8             return mWiFiNetworkInfo.isAvailable();   9         }  10     }  11     return false;  12 }  

3)判断MOBILE网络是否可用

 1 public boolean isMobileConnected(Context context) {   2     if (context != null) {   3         ConnectivityManager mConnectivityManager = (ConnectivityManager) context   4                 .getSystemService(Context.CONNECTIVITY_SERVICE);   5         NetworkInfo mMobileNetworkInfo = mConnectivityManager   6                 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);   7         if (mMobileNetworkInfo != null) {   8             return mMobileNetworkInfo.isAvailable();   9         }  10     }  11     return false;  12 }  

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

 1 public static int getConnectedType(Context context) {   2     if (context != null) {   3         ConnectivityManager mConnectivityManager = (ConnectivityManager) context   4                 .getSystemService(Context.CONNECTIVITY_SERVICE);   5         NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();   6         if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {   7             return mNetworkInfo.getType();   8         }   9     }  10     return -1;  11 }  

在开发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);  }

Ps:网上还有很多关于使用TelephonyManager的方法的,方法如下(但是我试了好几次都有问题,如每次第一次进入一个Activity时会自动收到网络断开的信号,每次网络状态改变时收到多次回调且状态不正确。不知道有什么要注意的地方,求指点!)

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  mTelephonyMgr.listen(new PhoneStateListener(){@Overridepublic void onDataConnectionStateChanged(int state) {switch(state){case TelephonyManager.DATA_DISCONNECTED://网络断开break;case TelephonyManager.DATA_CONNECTING://网络正在连接break;case TelephonyManager.DATA_CONNECTED://网络连接上break;}}}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

至于第二种方法,本人并没有去尝试过。第一种方式还是比较好用,如果要程序隐藏在后台的话,建议开个service,将BroadcastReceiver注册在service,但不要忘了取消注册。

在测试中遇到过这样的状况,将一个当前连接wifi的路由设备关闭,但是程序并没有捕捉到unconnect network,可能是因为手机设备立刻连接另一个路由设备了。

Android 监控网络状态

 1 public static boolean isNetworkAvailable(Context context) {    2         ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);    3         if (connectivity == null) {    4             Log.i("NetWorkState", "Unavailabel");    5             return false;    6         } else {    7             NetworkInfo[] info = connectivity.getAllNetworkInfo();    8             if (info != null) {    9                 for (int i = 0; i < info.length; i++) {   10                     if (info[i].getState() == NetworkInfo.State.CONNECTED) {   11                         Log.i("NetWorkState", "Availabel");   12                         return true;   13                     }   14                 }   15             }   16         }   17         return false;   18     }  


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

 1 @Override    2 public void onReceive(Context context, Intent intent) {    3 Log.e(TAG, "网络状态改变");    4    5 boolean success = false;    6    7 //获得网络连接服务    8 ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);    9 // State state = connManager.getActiveNetworkInfo().getState();   10 State state = connManager.getNetworkInfo(   11 ConnectivityManager.TYPE_WIFI).getState(); // 获取网络连接状态   12 if (State.CONNECTED == state) { // 判断是否正在使用WIFI网络   13 success = true;   14 }   15   16 state = connManager.getNetworkInfo(   17 ConnectivityManager.TYPE_MOBILE).getState(); // 获取网络连接状态   18 if (State.CONNECTED != state) { // 判断是否正在使用GPRS网络   19 success = true;   20 }   21   22 if (!success) {   23 Toast.makeText(LocationMapActivity.this, "您的网络连接已中断", Toast.LENGTH_LONG).show();   24 }    25   26 }  


在Activity的onCreate中:

//注册网络监听   IntentFilter filter = new IntentFilter();    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);   registerReceiver(mNetworkStateReceiver, filter);   //在Activity中的onDestroy中:'     unregisterReceiver(mNetworkStateReceiver); //取消监听 

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

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

2.使用WIFI上网

3.CMWAP(中国移动代理)

4.CMNET上网

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

http://www.2cto.com/kf/201111/112100.html 这里写有关于添加中国移动代理的例子!

下面是网络判断的方法:

 1 /** 2  3      * @author sky 4  5      * Email vipa1888@163.com 6  7      * QQ:840950105 8  9      * 获取当前的网络状态  -1:没有网络  1:WIFI网络2:wap网络3:net网络10 11      * @param context12 13      * @return14 15      */ 16 17     public static int getAPNType(Context context){ 18 19         int netType = -1;  20 21         ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 22 23         NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 24 25          26 27         if(networkInfo==null){ 28 29             return netType; 30 31         } 32 33         int nType = networkInfo.getType(); 34 35         if(nType==ConnectivityManager.TYPE_MOBILE){ 36 37             Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo()); 38 39             if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){ 40 41                 netType = CMNET; 42 43             } 44 45             else{ 46 47                 netType = CMWAP; 48 49             } 50 51         } 52 53         else if(nType==ConnectivityManager.TYPE_WIFI){ 54 55             netType = WIFI; 56 57         } 58 59         return netType; 60 61     } 

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

学习在于积累,希望和大家一起分享

更多相关文章

  1. android 设置 button 不同状态的图片
  2. android连接mysql数据库
  3. Android(安卓)studio 自带的 LoginActivity 连接MySQL 实现登录
  4. Android网络连接判断与处理
  5. Web后台和Android前端之间的网络通信
  6. Android中的BatteryService及相关组件
  7. Android网络操作
  8. android 实时获取wifi信号强度
  9. Android(安卓)读取网络数据

随机推荐

  1. Error in an XML file: aborting build.
  2. Mars视频笔记——ExpandableListActivity
  3. Android(安卓)中如何处理双击事件
  4. android webview 学习
  5. Android之——Surface、SurfaceView与Sur
  6. android 模拟器键盘控制键 以及 设置模拟
  7. Android开发傻瓜入门-开发自己的手机短信
  8. android报错——The import android.util
  9. Android(安卓)之多点触摸 手势拉伸放大缩
  10. 自定义Android菜单背景