您的位置:首页 > 理论基础 > 计算机网络

如何判断网络连接状态

2016-12-13 21:58 363 查看
其实这就是一个简单的工具类,只是自己记录下来方便自己以后拷贝


使用场景:比如说在登录,在下载,在上传等网络操作之前,我们可以先判断下当前网络状态,如果没有网络,就给予提示.而当在下载等需要大量流量的网络操作前,我们又可以先判断当前是不是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变为手机网络的时候要暂停下载任务,并提示要不要继续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: