Android判断是否有网
程序员文章站
2022-05-19 18:55:59
...
新项目中需要判断一下是否现在联网,没有联网的状态读取本地存储,
导入工具类,判断现在的状态是否联网
package com.feng.savatest;
import android.content.Context;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;
public class StateTest {
public static final String NETWORK_IS_NOT_TO_FORCE = "网络不给力";
/**
* 判断网络连接是否可用
*/
public static boolean isNetworkAvailable(Context context){
ConnectivityManager cm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm == null){
Toast.makeText(context, Constant.NETWORK_IS_NOT_TO_FORCE, Toast.LENGTH_SHORT).show();}else {
//如果仅仅是用来判断网络连接
//则可以使用 cm.getActiveNetworkInfo().isAvailable();
NetworkInfo[] info=cm.getAllNetworkInfo();
if(info != null){
for(int i=0;i<info.length;i++){
if(info[i].getState() == NetworkInfo.State.CONNECTED){
return true;
}
}
}
}
return false;
}
/**
* 判断是wifi还是3g网络,用户的体现性在这里了,wifi就可以建议下载或者在线播放。
*/
public static boolean isWifi(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkINfo = cm.getActiveNetworkInfo();
if (networkINfo != null
&& networkINfo.getType() == ConnectivityManager.TYPE_WIFI) {
Toast.makeText(context, "是wifi", Toast.LENGTH_SHORT).show();
return true;
}
Toast.makeText(context, "不是wifi", Toast.LENGTH_SHORT).show();
return false;
}
/***
* 判断WIFI是否打开
*/
public static boolean isWifiEnabled(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {
Toast.makeText(context, Constant.WIFI_IS_OK, Toast.LENGTH_SHORT).show();
return true;
}
}
}
} Toast.makeText(context, Constant.WIFI_IS_NO, Toast.LENGTH_SHORT).show();
return false;
}
/**
* 判断是否是3G网络
*/
public static boolean is3rd(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkINfo = cm.getActiveNetworkInfo();
if (networkINfo != null
&& networkINfo.getType() == ConnectivityManager.TYPE_MOBILE) {
Toast.makeText(context, "是3G", Toast.LENGTH_SHORT).show();
return true;
}
Toast.makeText(context, "不是3G", Toast.LENGTH_SHORT).show();
return false;
}
/**
* 判断GPS是否打开
*/
public static boolean isGpsEnabled(Context context) {
LocationManager locationManager
= (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)
// boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps) {
Toast.makeText(context,Constant.GPS_IS_OK, Toast.LENGTH_SHORT).show();
return true;
}
Toast.makeText(context, Constant.GPS_IS_NO, Toast.LENGTH_SHORT).show();
return false;
}
}
用第一个方法就好了,
在代码中引用方法判断是否有网
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(StateTest.isNetworkAvailable(MainActivity.this)){
Toast.makeText(MainActivity.this,"现在有网",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this,"当前无网络状态",Toast.LENGTH_SHORT).show();
}
}
});
/**
* 判断网络连接是否可用
*/
public static boolean isNetworkAvailable(Context context){
ConnectivityManager cm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm == null){
Toast.makeText(context, Constant.NETWORK_IS_NOT_TO_FORCE, Toast.LENGTH_SHORT).show();}else {
//如果仅仅是用来判断网络连接
//则可以使用 cm.getActiveNetworkInfo().isAvailable();
NetworkInfo[] info=cm.getAllNetworkInfo();
if(info != null){
for(int i=0;i<info.length;i++){
if(info[i].getState() == NetworkInfo.State.CONNECTED){
return true;
}
}
}
}
return false;
}
最后记得加权限吧
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
就不截图了,但是项目中好像发现了一个小问题,
在链接wifi的情况下,不管这个wifi有木有网,只要连接了wifi就是有网络状态,我网上看了下,我这个方法就是大多数人用的方法,但是,他并没有判断当前是否真实有网,
哪位大佬明白,可以给小弟解释下
上一篇: 【Java】if判断boolean类型
下一篇: 数据结构 树常见算法问题
推荐阅读