如何判断网络连接状态
2016-12-13 21:58
363 查看
其实这就是一个简单的工具类,只是自己记录下来方便自己以后拷贝
测试结果如下:
当然还有很多方法可以去尝试
getDetailedState():获取详细状态。
getExtraInfo():获取附加信息。
getReason():获取连接失败的原因。
getType():获取网络类型(一般为移动或Wi-Fi)。
getTypeName():获取网络类型名称(一般取值“WIFI”或“MOBILE”)。
isAvailable():判断该网络是否可用。
isConnected():判断是否已经连接。
isConnectedOrConnecting():判断是否已经连接或正在连接。
isFailover():判断是否连接失败。
isRoaming():判断是否漫游
当用wifi上的时候
getType 是WIFI
getExtraInfo是空的
当用手机上的时候
getType 是MOBILE
用移动CMNET方式
getExtraInfo 的值是cmnet
用移动CMWAP方式
getExtraInfo 的值是cmwap 但是不在代理的情况下访问普通的网站访问不了
用联通3gwap方式
getExtraInfo 的值是3gwap
用联通3gnet方式
getExtraInfo 的值是3gnet
用联通uniwap方式
getExtraInfo 的值是uniwap
用联通uninet方式
getExtraInfo 的值是uninet
用法:
1:用在广播中,监听系统中的网络变化
2:网络连接失败时,进行故障切换,比如说弹出个对话框引导你检验网络
3:在下载时,由wifi变为手机网络的时候要暂停下载任务,并提示要不要继续
使用场景:比如说在登录,在下载,在上传等网络操作之前,我们可以先判断下当前网络状态,如果没有网络,就给予提示.而当在下载等需要大量流量的网络操作前,我们又可以先判断当前是不是wifi连接状态,避免了在3G或4G网络下造成大量的流量损失.
public class NetWorkUtil { private static ConnectivityManager connectManager; //这个方法判断当前状态是否有网络 public static boolean havaNetWork(Context context) { //获取网络连接管理者对象 connectManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //获取网络状态信息 NetworkInfo info = connectManager.getActiveNetworkInfo(); if (info == null || !info.isConnected()) { return false; } if (info.isRoaming()) { //漫游状态 return false; } return true; }
//这个方法用来判断是否wifi模式 public static boolean isWifi() { if (connectManager != null) { //拿到所有的网络连接信息数组 NetworkInfo[] info = connectManager.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) { return true; } } } } return false; } }
在这里,写成了工具类,2个静态方法一个是判断当前有无网络,另外个方法判断当前是不是wifi网络连接.接下来我们就测试一下.
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); boolean b = NetWorkUtil.havaNetWork(this); boolean wifi = NetWorkUtil.isWifi(); Toast.makeText(this,b == true? "当前有网络" :"当前无网络",Toast.LENGTH_SHORT).show(); Toast.makeText(this< 4000 /span>,wifi == true? "当前wifi连接":"当前wifi没有连接",Toast.LENGTH_SHORT).show(); } }
测试结果如下:
当然还有很多方法可以去尝试
getDetailedState():获取详细状态。
getExtraInfo():获取附加信息。
getReason():获取连接失败的原因。
getType():获取网络类型(一般为移动或Wi-Fi)。
getTypeName():获取网络类型名称(一般取值“WIFI”或“MOBILE”)。
isAvailable():判断该网络是否可用。
isConnected():判断是否已经连接。
isConnectedOrConnecting():判断是否已经连接或正在连接。
isFailover():判断是否连接失败。
isRoaming():判断是否漫游
当用wifi上的时候
getType 是WIFI
getExtraInfo是空的
当用手机上的时候
getType 是MOBILE
用移动CMNET方式
getExtraInfo 的值是cmnet
用移动CMWAP方式
getExtraInfo 的值是cmwap 但是不在代理的情况下访问普通的网站访问不了
用联通3gwap方式
getExtraInfo 的值是3gwap
用联通3gnet方式
getExtraInfo 的值是3gnet
用联通uniwap方式
getExtraInfo 的值是uniwap
用联通uninet方式
getExtraInfo 的值是uninet
用法:
1:用在广播中,监听系统中的网络变化
2:网络连接失败时,进行故障切换,比如说弹出个对话框引导你检验网络
3:在下载时,由wifi变为手机网络的时候要暂停下载任务,并提示要不要继续
相关文章推荐
- Scrapy框架爬取京东商品
- 计算机网络基础
- 网络爬虫
- http协议
- 《图解HTTP》学习笔记之(一)
- 一个非常棒的 RTSP OVER HTTP
- 简单的python http接口自动化脚本
- 【bzoj1596】[Usaco2008 Jan]电话网络 树形dp
- R链接到数据库(http://www.dataguru.cn/thread-289411-1-1.html)
- RHCE之HTTPD+FTP+KickStart发布镜像,用于KVM的VM自动安装过程 推荐
- 【转载 来自sdnlab】 开放网络没那么简单
- 蒸馏神经网络(Distill the Knowledge in a Neural Network)
- Android 网络工具类NetworkUtils使用
- java发送http的get、post请求
- TCP三次握手过程
- https://my.oschina.net/closeday/blog/297225
- 华为云管理网络的“三全”之策
- 一次HTTP请求的背后
- 浅谈:OSI七层模型(网络七层协议)
- ldap安装与学习(转载自:http://blog.sina.com.cn/s/blog_72ee04a40100p0ce.html)