Android网络类型判断(2g、3g、wifi)

简介:
判断网络类型是wifi,还是3G,还是2G网络,对不同
的网络进行不同的处理,现将判断方法整理给大家,以供参考
 
说明:下面用到的数据移动2G,联通2G,联通3G,wifi我都已经测试过,暂时手上
没有电信的卡,所以没有验证,有电信手机的同事,可以验证一下,验证后将结果
发送给大家。
 
 ConnectivityManager connectMgr = (ConnectivityManager) this
        .getSystemService(Context.CONNECTIVITY_SERVICE);
 
 NetworkInfo info = connectMgr.getActiveNetworkInfo();
 
一、判断网络是否是wifi,在判断之前一定要进行的非空判断,如果没有任何网络
连接info ==null
info.getType() == ConnectivityManager.TYPE_WIFI
 
二、判断是否是手机网络
info !=null && info.getType() ==  ConnectivityManager.TYPE_MOBILE
 
手机网络进行详细区分:
 
info.getSubtype() 这里使用 getSubtype(),不是 getType(),getType()返回的
是0,或者1,是区分是手机网络还是wifi
 
info.getSubtype()取值列表如下:
 
         * NETWORK_TYPE_CDMA 网络类型为CDMA
         * NETWORK_TYPE_EDGE 网络类型为EDGE
         * NETWORK_TYPE_EVDO_0 网络类型为EVDO0
         * NETWORK_TYPE_EVDO_A 网络类型为EVDOA
         * NETWORK_TYPE_GPRS 网络类型为GPRS
         * NETWORK_TYPE_HSDPA 网络类型为HSDPA
         * NETWORK_TYPE_HSPA 网络类型为HSPA
         * NETWORK_TYPE_HSUPA 网络类型为HSUPA
         * NETWORK_TYPE_UMTS 网络类型为UMTS
 
联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EDGE,电信的2G为CDMA,电信
的3G为EVDO
 
android获取手机的ip地址
private String getPhoneIp() {
        try {  
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { //if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) { return inetAddress.getHostAddress().toString(); } } } } catch (Exception e) { } return ""; }




复制代码
    /**
     * 判断是否是2G网络
     * 
     * @param context
     * @return
     */
    @SuppressLint("NewApi")
    public boolean getNetWorkType() {
        boolean is2G = false;
        NetworkInfo networkInfo = ((ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE))
                .getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                Logger.d("NetworkStatus", "Network Type:" + " WIFI");
                is2G = false;
            } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                String subTypeName = networkInfo.getSubtypeName();
                int networkType = networkInfo.getSubtype();
                Logger.d("NetworkStatus", "Network SubtypeName: " + subTypeName
                        + " Subtype: " + networkType);
                switch (networkType) {
                case TelephonyManager.NETWORK_TYPE_GPRS:
                case TelephonyManager.NETWORK_TYPE_EDGE:
                case TelephonyManager.NETWORK_TYPE_CDMA:
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                case TelephonyManager.NETWORK_TYPE_IDEN: // api<8 : replace by
                                                            // 11
                    Logger.d("NetworkStatus", "Network Type:" + " 2G");
                    is2G = true;
                    break;
                case TelephonyManager.NETWORK_TYPE_UMTS:
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                case TelephonyManager.NETWORK_TYPE_EVDO_A:
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                case TelephonyManager.NETWORK_TYPE_HSPA:
                case TelephonyManager.NETWORK_TYPE_EVDO_B: // api<9 : replace by
                                                            // 14
                case TelephonyManager.NETWORK_TYPE_EHRPD: // api<11 : replace by
                                                            // 12
                case TelephonyManager.NETWORK_TYPE_HSPAP: // api<13 : replace by
                                                            // 15
                    // 3G
                    Logger.d("NetworkStatus", "Network Type:" + " 3G");
                    is2G = false;
                    break;
                case TelephonyManager.NETWORK_TYPE_LTE: // api<11 : replace by
                                                        // 13
                    // 4G
                    Logger.d("NetworkStatus", "Network Type:" + "4G");
                    is2G = false;
                    break;
                default:
                    // 中国移动 联通 电信 三种3G制式
                    if (subTypeName.equalsIgnoreCase("TD-SCDMA")
                            || subTypeName.equalsIgnoreCase("WCDMA")
                            || subTypeName.equalsIgnoreCase("CDMA2000")) {
                        // 3G
                        Logger.d("NetworkStatus", "Network Type:" + " 3G");
                        is2G = false;
                    } else {
                        Logger.d("NetworkStatus", "Network Type:" + " 2G");
                        is2G = true;
                    }
                    break;
                }
            }
        } else {
            Logger.d("NetworkStatus", "Network Type:" + " 2G");
        }
        return is2G;
    }
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5464489.html,如需转载请自行联系原作者

相关文章
|
8月前
|
安全
网工记背配置命令(3)----POE配置示例
网工记背配置命令(3)----POE配置示例
46 1
4G、Wifi、蓝牙所谓的AT指令模式和数据透传模式到底是什么意思?
4G、Wifi、蓝牙所谓的AT指令模式和数据透传模式到底是什么意思?
612 0
如何处理“WLAN没有有效的IP配置”这一问题?
如何处理“WLAN没有有效的IP配置”这一问题?
460 0
修复WiFi网卡驱动异常导致WiFi图标消失报错代码(56)
修复WiFi网卡驱动异常导致WiFi图标消失报错代码(56)
|
存储 测试技术 C语言
西门子S7-200 SMART自由口通信参数如何设置?如何编写发送程序和接收程序?如何测试?
西门子S7-200 SMART除了支持以太网通信,还可以通过CPU上或信号板上的RS485接口实现串口通信。支持的串口协议,包括自由口协议、USS协议、MODBUS协议和PPI协议。STEP7 Micro/WIN SMART编程软件安装时自动集成串口通信所需要的功能块和子程序。
西门子S7-200 SMART自由口通信参数如何设置?如何编写发送程序和接收程序?如何测试?
关于 Qt在海思平台使用脚本和文件控制GPIO口写入高低无效 的解决方法
关于 Qt在海思平台使用脚本和文件控制GPIO口写入高低无效 的解决方法
关于 Qt在海思平台使用脚本和文件控制GPIO口写入高低无效 的解决方法
|
5G 网络架构
WiFi - 为啥WiFi信号的总是这么差?【附:解决方案】(上)
WiFi - 为啥WiFi信号的总是这么差?【附:解决方案】(上)
575 0
WiFi - 为啥WiFi信号的总是这么差?【附:解决方案】(上)
WiFi - 为啥WiFi信号的总是这么差?【附:解决方案】(下)
WiFi - 为啥WiFi信号的总是这么差?【附:解决方案】(下)
121 0
|
监控 Android开发
Android网络连接判断与处理
Android网络连接判断与处理
|
数据安全/隐私保护 小程序
蓝牙自定开锁时间--Python3
from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex 强制输入明文增加到16字节的倍数,在末尾补'0' def add_to_16(text): text = str(text, 'ISO-8859-1') if len(text.
625 0