码迷,mamicode.com
首页 > 移动开发 > 详细

判断Android网络状态信息-wifi,3g/4g 和定位方式-gps,network,passive

时间:2015-07-31 16:13:02      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:android   网络   gps   

我们项目的工具类中,这些方法应该是常驻方法,因为他们太常用了,一方面将这些方法总结在这篇文章中,以便于自己日后使用,另一方面也给大家提供个方便,省的每次到处去找了。

1.判断当前是否已经连网

不管连接的是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
详细状态 粗略状态
空闲 未连接
正在搜寻 正在连接中
正在连接中 正在连接中
正在验证中 正在连接中
已经连接上 已经连接上
正在断开连接 正在断开连接
已经断开连接 未连接
网络不可用 未连接
失败 未连接

2.判断当前网络是否是wifi网络

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;
    }

3.判断当前网络是否是移动网络

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;
    }

4.判断设备的定位方式

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

标签:android   网络   gps   

原文地址:http://blog.csdn.net/nugongahou110/article/details/47171287

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!