我们项目的工具类中,这些方法应该是常驻方法,因为他们太常用了,一方面将这些方法总结在这篇文章中,以便于自己日后使用,另一方面也给大家提供个方便,省的每次到处去找了。
不管连接的是WIFI还是移动网络,最终都会返回true,否则返回false
public static boolean isNetworkAvailable(Context context){
if (context!=null) {
//获取系统服务
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获得当前网络信息
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
if (activeNetworkInfo!=null) {
//如果已经连网,则会返回true
return activeNetworkInfo.isAvailable();
}
}
return false;
}
还有一种方法,和这个方法返回结果是一样的
public static boolean isNetworkAvailable(Context context) {
//获得系统服务,拿到ConnectivityManager
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
} else {
//获得全部网络信息
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
//遍历获得的网络信息
for (int i = 0; i < info.length; i++) {
//网络状态为CONNECTED时,返回true
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
关于网络状态NetworkInfo.State有如下总结:
Detailed state | Coarse-grained state |
---|---|
IDLE | DISCONNECTED |
SCANNING | CONNECTING |
CONNECTING | CONNECTING |
AUTHENTICATING | CONNECTING |
CONNECTED | CONNECTED |
DISCONNECTING | DISCONNECTING |
DISCONNECTED | DISCONNECTED |
UNAVAILABLE | DISCONNECTED |
FAILED | DISCONNECTED |
详细状态 | 粗略状态 |
---|---|
空闲 | 未连接 |
正在搜寻 | 正在连接中 |
正在连接中 | 正在连接中 |
正在验证中 | 正在连接中 |
已经连接上 | 已经连接上 |
正在断开连接 | 正在断开连接 |
已经断开连接 | 未连接 |
网络不可用 | 未连接 |
失败 | 未连接 |
public static boolean isWifi(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
public static boolean isMONET(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return true;
}
return false;
}
Android手机的定位方式有3种模式
1.网络模式:这种模式的定位精度低,定位速度快,耗电量一般,需要权限
android.permission.ACCESS_COARSE_LOCATION
或者
android.permission.ACCESS_FINE_LOCATION
2.GPS:这种模式定位精度高,定位速度慢,耗电量大,在室内或GPS信号差的地方无法定位,需要权限
android.permission.ACCESS_FINE_LOCATION
3.被动定位:这种模式是通过监听其他应用程序请求位置服务获得的位置信息来获取位置信息,无额外耗电量,局限性较大,需要依赖于其他应用程序,需要权限
android.permission.ACCESS_FINE_LOCATION
我们来看一下如何获取当前设备开启的定位模式,被动模式是自动开启的,混合模式是网络模式和gps模式都打开的情况,这种模式的优点是:定位时间短,精度高。缺点:费电
// 0表示被动模式 1表示网络模式 2表示GPS模式 3表示混合模式
public static int getLocationMode(Context context) {
boolean network = false;
boolean gps = false;
LocationManager locationManager = ((LocationManager) context
.getSystemService(Context.LOCATION_SERVICE));
List<String> accessibleProviders = locationManager.getProviders(true);
for(int i=0 ; i<accessibleProviders.size() ; i++){
String type = accessibleProviders.get(i);
if (LocationManager.NETWORK_PROVIDER.equals(type)) {
network = true;
continue;
}
if (locationManager.GPS_PROVIDER.equals(type)) {
gps = true;
continue;
}
}
if (network&&gps) {
return 3;
}else if (network) {
return 1;
}else if (gps) {
return 2;
}
return 0;
}
版权声明:欢迎转载,转载请注明出处http://blog.csdn.net/nugongahou110
判断Android网络状态信息-wifi,3g/4g 和定位方式-gps,network,passive
原文地址:http://blog.csdn.net/nugongahou110/article/details/47171287