android之网络状态判断(wifi和移动网络数据)
2017-12-21 15:48
417 查看
有时候需要监听网络的状态变化来及时提醒用户网络状况,因此我们得多各种网络变化进行监听,废话不多说,将网络各种情况都在代码中列出来了,有需求的可以根据实际情况进行提示。
1.首先需要进行广播的监听,网络状态变化会触发广播:
以上是广播的注册,对于wifi的监听有两种广播,都支持静态注册,但是对于整个网络的监听(wifi+移动网络数据)只能动态注册。
2.对广播进行接收和分析:
如上,log打印区分了总网络和wifi网络判断,因为前2个是专门针对wifi网络的监听,而第三个是针对整个网络的监听,所以为了区分,将整个网络的监听称之未总网络。
所以如果要进行网络的判断可以在最后个总网络里面进行判断,各种情况都已经注释清楚了,需要的可以根据自己情况进行提醒。
1.首先需要进行广播的监听,网络状态变化会触发广播:
//静态注册 <receiver android:name=".receiver.StartServiceReceiver" android:exported="true"> <intent-filter> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />//监听wifi的打开和关闭 <action android:name="android.net.wifi.STATE_CHANGE" />//监听wifi的连接状态 </intent-filter> </receiver> //动态注册,此广播只能动态注册才能接收到 IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);//网络的连接(包括wifi和移动网络)
以上是广播的注册,对于wifi的监听有两种广播,都支持静态注册,但是对于整个网络的监听(wifi+移动网络数据)只能动态注册。
2.对广播进行接收和分析:
public class StartServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 监听wifi的打开与关闭,与wifi的连接无关 if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) { int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); if (wifiState == WifiManager.WIFI_STATE_DISABLED) {//wifi关闭 MlogUtil.d("netstatus", "wifi已关闭"); } else if (wifiState == WifiManager.WIFI_STATE_ENABLED) {//wifi开启 MlogUtil.d("netstatus", "wifi已开启"); } else if (wifiState == WifiManager.WIFI_STATE_ENABLING) {//wifi开启中 MlogUtil.d("netstatus", "wifi开启中"); } else if (wifiState == WifiManager.WIFI_STATE_DISABLING) {//wifi关闭中 MlogUtil.d("netstatus", "wifi关闭中"); } } // 监听wifi的连接状态即是否连上了一个有效无线路由 if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (parcelableExtra != null) { MlogUtil.d("netstatus", "wifi parcelableExtra不为空"); NetworkInfo networkInfo = (NetworkInfo) parcelableExtra; if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {//已连接网络 MlogUtil.d("netstatus", "wifi 已连接网络"); if (networkInfo.isAvailable()) {//并且网络可用 MlogUtil.d("netstatus", "wifi 已连接网络,并且可用"); } else {//并且网络不可用 MlogUtil.d("netstatus", "wifi 已连接网络,但不可用"); } } else {//网络未连接 MlogUtil.d("netstatus", "wifi 未连接网络"); } } else { MlogUtil.d("netstatus", "wifi parcelableExtra为空"); } } // 监听网络连接,总网络判断,即包括wifi和移动网络的监听 if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); //连上的网络类型判断:wifi还是移动网络 if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { MlogUtil.d("netstatus", "总网络 连接的是wifi网络"); } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { MlogUtil.d("netstatus", "总网络 连接的是移动网络"); } //具体连接状态判断 checkNetworkStatus(networkInfo); } } private void checkNetworkStatus(NetworkInfo networkInfo) { if (networkInfo != null) { MlogUtil.d("netstatus", "总网络 info非空"); if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {//已连接网络 MlogUtil.d("netstatus", "总网络 已连接网络"); if (networkInfo.isAvailable()) {//并且网络可用 MlogUtil.d("netstatus", "总网络 已连接网络,并且可用"); } else {//并且网络不可用 MlogUtil.d("netstatus", "总网络 已连接网络,但不可用"); } } else if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED) {//网络未连接 MlogUtil.d("netstatus", "总网络 未连接网络"); } } else { MlogUtil.d("netstatus", "总网络 info为空"); } } }
如上,log打印区分了总网络和wifi网络判断,因为前2个是专门针对wifi网络的监听,而第三个是针对整个网络的监听,所以为了区分,将整个网络的监听称之未总网络。
所以如果要进行网络的判断可以在最后个总网络里面进行判断,各种情况都已经注释清楚了,需要的可以根据自己情况进行提醒。
相关文章推荐
- Android判断网络连接是否可用,WiFi、移动数据是否打开等
- Android基础_判断WIFI移动网络状态,打开WIFI和移动网路
- android 判断网络状态 (无网络 wifi 数据流量)
- android 判断当前网络是否可用(ping网络),包含wifi和移动数据网络
- Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲述了Android中不同Activity之间的数据传递 — Bundle对象的实现(-)+Android中Bundle的使用示例
- Android 判断用户2G/3G/4G移动数据网络
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- android 中获取网络状态、判断3G、2G、wifi网络、判断wifi是否打开、获取本机地址、获取本机串号IMEI整理
- (转)Android 判断用户2G/3G/4G移动数据网络
- Android 判断用户2G/3G/4G移动数据网络
- android判断wifi网络,移动网络质量
- Android杂谈--网络状态判断(3G/WIFI)
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- android网络状态判断(wifi、3G、2G)
- Android 判断用户2G/3G/4G移动数据网络
- android判断是否连接wifi和网络状态的判断
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- android网络状态判断(wifi、3G、2G)
- android 网络连接状态判断与数据类型
- Android杂谈--网络状态判断(3G/WIFI)