android运营商和网络类型分析

一些需求需要获取运营商和网络类型,下面对运营商和网络类型做分析。

先抛出一些废话的定义:

GSM:全球移动通讯系统Global System of Mobile communication就是众所周知的GSM,是当前应用最为广泛的移动电话标准。
CDMA:码分多址(CDMA)是在数字技术的分支--扩频通信技术上发展起来的一种崭新而成熟的无线通信技术。

可见,这两者是技术标准,和网络类型及制式无关。

进入正题。

1.获取话机类型

这个可以通过方法TelephonyManager#getPhoneType来获得,下面是返回类型。

/**
     * Returns a constant indicating the device phone type.  This
     * indicates the type of radio used to transmit voice calls.
     *
     * @see #PHONE_TYPE_NONE
     * @see #PHONE_TYPE_GSM
     * @see #PHONE_TYPE_CDMA
     * @see #PHONE_TYPE_SIP
     */

常用话机类型就是GSM类型和CDMA类型,SIP是和VOIP相关的东西,平时不常遇到。

2.获取运营商

TelephonyManager#getSimOperator用于获取SIM卡运营商ID,比如移动是46002

TelephonyManager#getSimOperatorName方法获取运营商名字,比如移动是CMCC

TelephonyManager#getSimCountryIso获取SIM卡国家,比如中国是cn

TelephonyManager#getSimState获取SIM卡状态

3.获取网络类型

重点来了。

TelephonyManager#getNetworkType方法获取网络类型。

想要确切的显示出手机当前的网络,比如“联通3G”,需要的就是这个。

在网上找了一些代码,看见一些代码在一些网络类型后面标明:“移动2G”,我只想说“呵呵”。

原因就是,从单一的网络类型是无法判断这点的。

回到正题,开始分析返回值。

1)NETWORK_TYPE_GPRS

GPRS是一种制式,相当于2.5G,它独立于话机类型而存在,虽然移动是GSM话机,联通是CDMA话机,但是他们都可以有这种制式,

拿移动2G举例,我所在城市是EDGE网络。但是在之前,移动和联通可能有同时使用GPRS的时候,

同时也不排除部分地区移动仍然部署了GPRS的可能性,所以比较不赞同在代码后面标“移动2G”的这位前辈。

2)NETWORK_TYPE_EDGE

EDGE应该算是2.75G。据我所知,联通好像没有升级2G网络到这个制式。而移动当前是在用这个。

3)NETWORK_TYPE_UMTS

UMTS定义是一种3G移动电话技术,使用WCDMA作为底层标准,WCDMA向下兼容GSM网络。

目前中国也就只有联通了,这个确实可以唯一判断运营商及其网络类型。

4)NETWORK_TYPE_CDMA

CDMA的定义是一种技术标准,有其2代、2.5代、3代技术。被认为是3代移动技术的首选,包含的标准有

WCDMA、CDMA2000、TD-SCDMA。这里CDMA指代CDMA2代技术标准的制式,中国电信在用。

5)NETWORK_TYPE_1xRTT

在CDMA2000中,通常被认为是2.5G或2.75G,速率只有其他3G的几分之一,电信可能使用。

6)NETWORK_TYPE_EVDO_0、NETWORK_TYPE_EVDO_A、NETWORK_TYPE_EVDO_B

两者都是CDMA2000标准中的版本,属于3G,电信可能使用。

7)NETWORK_TYPE_HSDPA

一种通信协议,建立在WCDMA上,相当于3.5G,联通可能使用。

8)NETWORK_TYPE_LTE

对应准4G,各个运营商都可能使用。

9)NETWORK_TYPE_GSM

这个值是隐藏的,值为16,暂时不知道什么卡会出现。猜想应该是对应GSM标准的最早期制式,没有验证。

10)NETWORK_TYPE_TD_SCDMA

也是隐藏的,值为17,使用移动3G时是这个值。

结论:判断哪个运营商那种网络不应该只根据NetworkType判断。

运营商单独获取,而NetworkType可以进一步知道是2G还是3G。

其他中国不存在的制式就先不判断了。

4.关于android版本兼容

对于android版本低的设备,不包含一些类型的定义,所以最好在自己的类中重新定义这些网络类型变量

时间: 2024-12-13 13:14:09

android运营商和网络类型分析的相关文章

[Android Traffic] 根据网络类型更改下载模式

转载自: http://blog.csdn.net/kesenhoo/article/details/7396321 Modifying your Download Patterns Based on the Connectivity Type [根据连接的网络类型来更改下载模式] 并不是所有的网络类型(Wi-Fi,3G,2G,etc)对电量的消耗是同等的.不仅仅Wi-Fi电波比无线电波消耗的电量要少很多,而且不同的无线电波(3G,2G,LTE……)也存在使用不同电量的区别. Use Wi-Fi

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

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

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

关于Android如何检测网络的类型,网上代码很多,但是有用的精品不多,前段时间,因为做项目需要涉及到具体网络类型的检查,特别是区分2G网络是为wap,还是net,类型,因为wap类型,需要配置代理上网,基于此,我将自己实现的过程代码记录下来: 1.定义常量来标识几种网络类型 /** 没有网络 */ public static final int NETWORKTYPE_INVALID = 0; /** wap网络 */ public static final int NETWORKTYPE_W

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

判断网络类型是wifi,还是3G,还是2G网络,对不同 的网络进行不同的处理,现将判断方法整理给大家,以供参考 说明:下面用到的数据移动2G,联通2G,联通3G,wifi我都已经测试过,暂时手上 没有电信的卡,所以没有验证,有电信手机的同事,可以验证一下,验证后将结果 发送给大家. ConnectivityManager connectMgr = (ConnectivityManager) this .getSystemService(Context.CONNECTIVITY_SERVICE);

【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强

本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见ImageCache. 主要特性:(1).使用简单  (2).可自动预取新数据  (3).可选择多种缓存算法(包括FIFO.LIFO.LRU.MRU.LFU.MFU等15种)或自定义缓存算法  (4).省流量性能佳(有且仅有一个线程获取数据)  (5).支持不同类型网络处理  (6)缓存可序列化到本地

android网络类型之2G-3G切换

在android手机‘设置’-‘移动网络类型’里可以看到有关网络类型的选项,一般默认为3G优先. 如果有需要在程序中切换网络类型的朋友,不妨试试下面的方法.这里提供了几种思路,虽然可能对待 手机的方式不太友好. 0)NetworkMode 来自Android源码,The preferred network mode 源码复制打印? 7 = Global 6 = EvDo only 5 = CDMA w/o EvDo 4 = CDMA / EvDo auto 3 = GSM / WCDMA aut

一起学android之如何获取网络类型并判断是否可用(20)

ConnectivityManager主要管理和网络连接相关的操作,通过getSystemService(Context.CONNECTIVITY_SERVICE)获 取网络连接的服务.因此我们可以通过ConnectivityManager这个类下的getActiveNetworkInfo()方法来获取当前的网络 连接状态,这个方法返回的是NetworkInfo对象, NetworkInfo描述了当前网络Mobile和Wifi的状态.NetworkInfo类中有 三个方法:(1)getType(

Android判断网络类型以及监控网络状态

一.判断网络类型是wifi,还是3G,还是2G网络 ConnectivityManager connectMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connectMgr.getActiveNetworkInfo(); 一.判断网络是否是wifi,在判断之前一定要进行的非空判断,如果没有任何网络 连接info ==null info.getT

Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1).  使用简单   (2). 轻松获取及预取新图片  (3).  可选择多种缓存算法(FIFO.LIFO.LRU.MRU.LFU.MFU等13种)或自定义缓存算法   (4).  省流量性能佳(有且仅有一个线程获取图片)   (5).  支持不同类型网络处理  (6).  可根据系统配置初始化缓存