Android如何检测网络的类型为3G、2G、wap、wifi

关于Android如何检测网络的类型,网上代码很多,但是有用的精品不多,前段时间,因为做项目需要涉及到具体网络类型的检查,特别是区分2G网络是为wap,还是net,类型,因为wap类型,需要配置代理上网,基于此,我将自己实现的过程代码记录下来:

1、定义常量来标识几种网络类型

    /** 没有网络 */
    public static final int NETWORKTYPE_INVALID = 0;

    /** wap网络 */
    public static final int NETWORKTYPE_WAP = 1;

    /** 2G网络 */
    public static final int NETWORKTYPE_2G = 2;

    /** 3G和3G以上网络,或统称为快速网络 */
    public static final int NETWORKTYPE_3G = 3;

    /** wifi网络 */
    public static final int NETWORKTYPE_WIFI = 4;

2、判断是否是FastMobileNetWork,将3G或者3G以上的网络称为快速网络

private static boolean isFastMobileNetwork(Context context) {
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
    switch (telephonyManager.getNetworkType()) {
        case TelephonyManager.NETWORK_TYPE_1xRTT:
            return false; // ~ 50-100 kbps
        case TelephonyManager.NETWORK_TYPE_CDMA:
            return false; // ~ 14-64 kbps
        case TelephonyManager.NETWORK_TYPE_EDGE:
            return false; // ~ 50-100 kbps
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
            return true; // ~ 400-1000 kbps
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
            return true; // ~ 600-1400 kbps
        case TelephonyManager.NETWORK_TYPE_GPRS:
            return false; // ~ 100 kbps
        case TelephonyManager.NETWORK_TYPE_HSDPA:
            return true; // ~ 2-14 Mbps
        case TelephonyManager.NETWORK_TYPE_HSPA:
            return true; // ~ 700-1700 kbps
        case TelephonyManager.NETWORK_TYPE_HSUPA:
            return true; // ~ 1-23 Mbps
        case TelephonyManager.NETWORK_TYPE_UMTS:
            return true; // ~ 400-7000 kbps
        case TelephonyManager.NETWORK_TYPE_EHRPD:
            return true; // ~ 1-2 Mbps
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
            return true; // ~ 5 Mbps
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return true; // ~ 10-20 Mbps
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return false; // ~25 kbps
        case TelephonyManager.NETWORK_TYPE_LTE:
            return true; // ~ 10+ Mbps
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            return false;
        default:
            return false;
        }
    }

3、获取网络类型是否是2G、3G、wap、wifi等

/**
     * 获取网络状态,wifi,wap,2g,3g.
     *
     * @param context 上下文
     * @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G},          *{@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}* <p>{@link #NETWORKTYPE_WIFI}
     */

    public static int getNetWorkType(Context context) {

        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();

        if (networkInfo != null && networkInfo.isConnected()) {
            String type = networkInfo.getTypeName();

            if (type.equalsIgnoreCase("WIFI")) {
                mNetWorkType = NETWORKTYPE_WIFI;
            } else if (type.equalsIgnoreCase("MOBILE")) {
                String proxyHost = android.net.Proxy.getDefaultHost();

                mNetWorkType = TextUtils.isEmpty(proxyHost)
                        ? (isFastMobileNetwork(context) ? NETWORKTYPE_3G : NETWORKTYPE_2G)
                        : NETWORKTYPE_WAP;
            }
        } else {
            mNetWorkType = NETWORKTYPE_INVALID;
        }

        return mNetWorkType;
    } 
时间: 2024-08-07 00:16:08

Android如何检测网络的类型为3G、2G、wap、wifi的相关文章

判断是否联网_检测网络的类型为3G、2G、wap、wifi

判断是否联网_检测网络的类型为3G.2G.wap.wifi  判断是否联网: /*** * judge Internet is available * * @author wei-spring * @return */ public boolean isHasNet() { ConnectivityManager cwjManager = (ConnectivityManager) mActivity .getSystemService(Context.CONNECTIVITY_SERVICE)

Android 判断当前网络连接类型

实际应用开发时,如果存在需要用户获取大量数据的情况,最好是先判断下网络类型,提示用户当前的网络类型,是否需要连接Wifi,etc.(手机流量太贵啦,当然土豪是无视这玩意的, (/ □ \)). 定义网络连接类型: public static final int NETTYPE_NULL = 0x00; //未连接网络 public static final int NETTYPE_WIFI = 0x01; //WIFI public static final int NETTYPE_MOBILE

Android开发检测网络是否连接

原来写的有一个(调戏糖宝)的客户端,没有加网络连接判断,在没有网络的情况下,会程序死掉.所以添加以下的代码,在程序运行的时候做下判断.解决这种因网络没有连接运行出错的问题. /**     * 检测网络是否可用     *      * @param context     *            上下文     * @return true 表示有网络连接 false表示没有可用网络连接     */    public static boolean isNetworkAvailable(C

自助终端机4G无线网关向下兼容3G/2G支持WiFi带×××

方案需求 随着现代科技不断发展,数字显示技术的应用将无处不在.凭借网络(3G/4G无线网络).多媒体技术融合,以媒体的方式发布处理,及时的与客户的反馈信息做互动,目前已广泛应用于金融.电信.医院.卖场.超市.宾馆.公共场所等领域,具有点多分散的特征,在集中管理和维护上集成了远程批量操作的要求,欣仰邦sim卡无线路由器在自助终端机上的应用很好的解决了这一难题. 技术部署 欣仰邦3G/4G 路由器和运营管理服务中心平台三部分组成.其中,数字标牌终端包括控制器.播放终端和显示终端组成,用于客户直接可操

android如何判断当前网络类型(联网,2g,3g,wifi等)

一般对网络的判断都是判断是否联网,不过有时候我们需要知道具体的网络类型,比如在3g网络下,百度地图的定位功能存在很大的偏差,这就需要提前判断网络类型针对3g网络情况做特殊的处理. 关于Android如何检测网络的类型,网上代码很多,但是有用的不多,真正解决了问题的我只找到一篇(见文章末尾网址),为了更好的方便自己理解,对这片文章做了解释和整理. 在android中判断网络需要用到ConnectivityManager,下面的方法演示了如何用ConnectivityManager判断当前是否联网:

Android检测网络状态,判断当前网络是否可用

用户手机当前网络可用:WIFI.2G/3G网络,用户打开与不打开网络,和是否可以用是两码事.可以使用指的是:用户打开网络了并且可以连上互联网进行上网. 检测当前网络是否可用,代码如下: /** * 检测当的网络(WLAN.3G/2G)状态 * @param context Context * @return true 表示网络可用 */ public static boolean isNetworkAvailable(Context context) { ConnectivityManager

Android Network -------------------判断网络状态(网络的连接,改变,和判断2G/3G/4G)

现在app大多都需要从网络上获得数据.所以访问网络是在所难免.但是再访问网络之前,我们应该先做一下网络的状态判断.其实在访问网络之前我们要做一些状态判断,对应一些状态判断来做处理,并不是直接使用Http访问网络即可.很多人在开发就经常把网络这块直接跳过,直接访问网络,可以一断网,各种体验效果不好,不是说app没法用,只是体验效果差.还有,就是我们可能为用户考虑,因为现在一般连网是wifi和手机流量,都知道后者收费是比较高的.假如我们的app加载的图片或者有大的数据下载操作,可是用户的本意是要是在

Android检测网络是否可用并获取网络类型

在类中使用getSystemService的时候需要这样进行使用:1. public class JajaMenu extends Activity { public static JajaMenu instance; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); instance=this; } //获取实例 public

检测网络变化(wifi、2g、3g、4g)

检测网络变化(wifi.2g.3g.4g) 1.注册广播"android.net.conn.CONNECTIVITY_CHANGE"和"android.net.wifi.STATE_CHANGE" 进行监听: private class ConnectivityBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent in