有时候需要监听网络的状态变化来及时提醒用户网络状况,因此我们得多各种网络变化进行监听,废话不多说,将网络各种情况都在代码中列出来了,有需求的可以根据实际情况进行提示。
1.首先需要进行广播的监听,网络状态变化会触发广播:

//静态注册
<receiverandroid: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 {@Overridepublic 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和移动网络数据)相关推荐

  1. UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)

    原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...

  2. Android杂谈--网络状态判断(3G/WIFI)

    在http://www.cnblogs.com/loulijun/archive/2012/02/03/2337230.html这篇文章中已经介绍了网络状态的判断,但是测试后发现用此方法只能够判断WI ...

  3. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...

  4. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  5. iOS 网络状态判断方案(支持iOS11和iPhoneX)

    在之前的iPhone中.我们可以根据导航栏上方的网络状态view.来判断网络状态.(这种方案本来就不太好) 并且,这种方案在iPhone X 手机上.不可使用. 那么,在iPhone X 或者之前的手 ...

  6. ios 网络状态获取_Network Kit X——网络检测工具箱

    你是否需要一款简洁实用的网络检测工具呢?来试试Network Kit X for Mac吧!Network Kit X Mac版是一款运行在MacOS平台上的网络检测工具箱.Network Kit X ...

  7. Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动

    不多说了,直接看代码, NB人会懂的! package com.example.vdisktest;import android.app.Activity; import android.conten ...

  8. win10找不到wifi网络_当WiFi和4G网络齐飞,你的手机恐怕撑不到回家充电了…

     二次元的中科院物理所  From:bilibili专栏 现代人行走江湖,必备三件法宝: 手机.网络.充电宝~ 即便在4G基站遍布各个旮旮角角的今天,当你带着心仪的人儿走进一家咖啡店,第一件事仍然是低 ...

  9. Android判断网络状态是否断开

    1.Android判断网络状态是否断开      不多说了,看代码吧! /** * 判断网络状态是否可用 * @return true: 网络可用 ; false: 网络不可用 */ public b ...

最新文章

  1. java中javamail收发邮件实现方法
  2. ArcGIS学习记录—KMZ KML与SHP文件互相转换
  3. php post请求后端拿不到值_Ajax 提交POST后,后台php 无法获取$POST值
  4. 架构专家梁勇:哈啰在分布式消息治理和微服务治理中的实践
  5. Java新特性之Nashorn的实例详解
  6. php提交表单并发送邮件,php提交表单发送邮件的方法
  7. Redis--Windos下的安装和使用
  8. 架构解密从分布式到微服务:微服务架构到底是什么?
  9. Netty工作笔记0081---编解码器和处理器链梳理
  10. 20191127每日一句
  11. Swagger注解 详解
  12. 怎么查看电脑最大支持扩展内存
  13. linux usb有线网卡驱动_求助!linux下安装usb无线网卡驱动成功 但是ping不通网关。。。...
  14. serv-u 用户使用sftp登录 时间显示不对_宜家中国电商化之路步履蹒跚 或因忽视消费者的使用习惯...
  15. SqlServer——正则表达式
  16. Oracle 根据汉字返回对应拼音的 函数
  17. prometheus常用函数详解
  18. 微博数据爬虫——V影响力榜top100用户(一)
  19. 树莓派网线直连Linux,树莓派+一根网线直连笔记本电脑
  20. K8S集群中Pod与Pod之间网络故障排查思路

热门文章

  1. Android开发读取通讯录信息
  2. 悖论在计算机中的应用,信息悖论
  3. 揭秘成都Java培训班学费
  4. HJ42 学英语(递归)
  5. 读书笔记:《代码大全2》
  6. VISI 21五金冲压连续模具设计视频教程 SDK21教程
  7. 浅谈通用的字典表结构设计
  8. qq浏览器HTML5在哪,qq浏览器wifi助手功能在哪里?
  9. Java基础 DAY11
  10. mybatis百度云盘分享