android之网络状态判断(wifi和移动网络数据)
有时候需要监听网络的状态变化来及时提醒用户网络状况,因此我们得多各种网络变化进行监听,废话不多说,将网络各种情况都在代码中列出来了,有需求的可以根据实际情况进行提示。
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和移动网络数据)相关推荐
- UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)
原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...
- Android杂谈--网络状态判断(3G/WIFI)
在http://www.cnblogs.com/loulijun/archive/2012/02/03/2337230.html这篇文章中已经介绍了网络状态的判断,但是测试后发现用此方法只能够判断WI ...
- Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...
- android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...
获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...
- iOS 网络状态判断方案(支持iOS11和iPhoneX)
在之前的iPhone中.我们可以根据导航栏上方的网络状态view.来判断网络状态.(这种方案本来就不太好) 并且,这种方案在iPhone X 手机上.不可使用. 那么,在iPhone X 或者之前的手 ...
- ios 网络状态获取_Network Kit X——网络检测工具箱
你是否需要一款简洁实用的网络检测工具呢?来试试Network Kit X for Mac吧!Network Kit X Mac版是一款运行在MacOS平台上的网络检测工具箱.Network Kit X ...
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
不多说了,直接看代码, NB人会懂的! package com.example.vdisktest;import android.app.Activity; import android.conten ...
- win10找不到wifi网络_当WiFi和4G网络齐飞,你的手机恐怕撑不到回家充电了…
二次元的中科院物理所 From:bilibili专栏 现代人行走江湖,必备三件法宝: 手机.网络.充电宝~ 即便在4G基站遍布各个旮旮角角的今天,当你带着心仪的人儿走进一家咖啡店,第一件事仍然是低 ...
- Android判断网络状态是否断开
1.Android判断网络状态是否断开 不多说了,看代码吧! /** * 判断网络状态是否可用 * @return true: 网络可用 ; false: 网络不可用 */ public b ...
最新文章
- java中javamail收发邮件实现方法
- ArcGIS学习记录—KMZ KML与SHP文件互相转换
- php post请求后端拿不到值_Ajax 提交POST后,后台php 无法获取$POST值
- 架构专家梁勇:哈啰在分布式消息治理和微服务治理中的实践
- Java新特性之Nashorn的实例详解
- php提交表单并发送邮件,php提交表单发送邮件的方法
- Redis--Windos下的安装和使用
- 架构解密从分布式到微服务:微服务架构到底是什么?
- Netty工作笔记0081---编解码器和处理器链梳理
- 20191127每日一句
- Swagger注解 详解
- 怎么查看电脑最大支持扩展内存
- linux usb有线网卡驱动_求助!linux下安装usb无线网卡驱动成功 但是ping不通网关。。。...
- serv-u 用户使用sftp登录 时间显示不对_宜家中国电商化之路步履蹒跚 或因忽视消费者的使用习惯...
- SqlServer——正则表达式
- Oracle 根据汉字返回对应拼音的 函数
- prometheus常用函数详解
- 微博数据爬虫——V影响力榜top100用户(一)
- 树莓派网线直连Linux,树莓派+一根网线直连笔记本电脑
- K8S集群中Pod与Pod之间网络故障排查思路