Android中检测手机制式和移动网络类型 2011-08-02 16:19:33| 分类: 历程 | 标签: |字号大

小 订阅
Android中与电话功能相关的类是 TelephonyManager ,此类中定义了很多常量,以下分类说明
获取以下信息需要在AndroidManifest.xml中指定权限

一、 数据连接状态
获取数据连接状态:int getDataState()
获取数据活动状态:int getDataActivity()
常用的有这几个:
int DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据
int DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据
int DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据
int DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受
int DATA_CONNECTED 数据连接状态:已连接
int DATA_CONNECTING 数据连接状态:正在连接
int DATA_DISCONNECTED 数据连接状态:断开
int DATA_SUSPENDED 数据连接状态:暂停

二、 移动网络类型
获取网络类型:int getNetworkType()
常用的有这几个:
int NETWORK_TYPE_CDMA 网络类型为CDMA
int NETWORK_TYPE_EDGE 网络类型为EDGE
int NETWORK_TYPE_EVDO_0 网络类型为EVDO0
int NETWORK_TYPE_EVDO_A 网络类型为EVDOA
int NETWORK_TYPE_GPRS 网络类型为GPRS
int NETWORK_TYPE_HSDPA 网络类型为HSDPA
int NETWORK_TYPE_HSPA 网络类型为HSPA
int NETWORK_TYPE_HSUPA 网络类型为HSUPA
int NETWORK_TYPE_UMTS 网络类型为UMTS
在中国,联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO

三、 手机制式类型
获取手机制式:int getPhoneType()
int PHONE_TYPE_CDMA 手机制式为CDMA,电信
int PHONE_TYPE_GSM 手机制式为GSM,移动和联通
int PHONE_TYPE_NONE 手机制式未知

四、 SIM卡状态
获取SIM卡状态:int getSimState()
int SIM_STATE_ABSENT SIM卡未找到
int SIM_STATE_NETWORK_LOCKED SIM卡网络被锁定,需要Network PIN解锁
int SIM_STATE_PIN_REQUIRED SIM卡PIN被锁定,需要User PIN解锁
int SIM_STATE_PUK_REQUIRED SIM卡PUK被锁定,需要User PUK解锁
int SIM_STATE_READY SIM卡可用
int SIM_STATE_UNKNOWN SIM卡未知

五、其它信息
String getSimCountryIso()
返回SIM卡提供商的国家代码
String getNetworkCountryIso()
返回ISO标准的国家码,即国际长途区号
String getSimOperator()
String getNetworkOperator()
返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
String getSimOperatorName()
String getNetworkOperatorName()
返回移动网络运营商的名字(SPN)
String getSubscriberId()
返回IMSI,即国际移动用户识别码
String getDeviceId()
如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID
String getSimSerialNumber()
返回SIM卡的序列号(IMEI)
String getLine1Number()
返回手机号码,对于GSM网络来说即MSISDN
boolean isNetworkRoaming()
返回手机是否处于漫游状态
****************************************************************************************************************************************************
在AndroidManifest.xml文件中增加
<!--允许读取电话状态SIM的权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
代码如下:

private void getSystemPhoneMessage(){

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
//手机串号:GSM手机的 IMEI 和 CDMA手机的 MEID.
String deviceID = telephonyManager.getDeviceId();
//手机号(有些手机号无法获取,是因为运营商在SIM中没有写入手机号)
String tel = telephonyManager.getLine1Number();
//获取手机SIM卡的序列号
String imei =telephonyManager.getSimSerialNumber();
//获取客户id,在gsm中是imsi号
String imsi =telephonyManager.getSubscriberId();
//电话方位
CellLocation str = telephonyManager.getCellLocation();
//运营商名称,注意:仅当用户已在网络注册时有效,在CDMA网络中结果也许不可靠
String networkoperatorName = telephonyManager.getNetworkOperatorName();
//取得和语音邮件相关的标签,即为识别符
String voiceMail = telephonyManager.getVoiceMailAlphaTag();
//获取语音邮件号码:
String voiceMailNumber = telephonyManager.getVoiceMailNumber();
//获取ISO国家码,相当于提供SIM卡的国家码。
String simCountryIso = telephonyManager.getSimCountryIso();

/**
* 电话状态:
* 1.tm.CALL_STATE_IDLE=0 无活动
* 2.tm.CALL_STATE_RINGING=1 响铃
* 3.tm.CALL_STATE_OFFHOOK=2 摘机
*/
int callState = telephonyManager.getCallState();

/**
* 设备的软件版本号:
* 例如:the IMEI/SV(software version) for GSM phones.
* Return null if the software version is not available.
*/
String devicesoftware = telephonyManager.getDeviceSoftwareVersion();

/**
* 获取ISO标准的国家码,即国际长途区号。
* 注意:仅当用户已在网络注册后有效。
* 在CDMA网络中结果也许不可靠。
*/
String networkCountry = telephonyManager.getNetworkCountryIso();

/**
* MCC+MNC(mobile country code + mobile network code)
* 注意:仅当用户已在网络注册时有效。
* 在CDMA网络中结果也许不可靠。
*/
String networkoperator = telephonyManager.getNetworkOperator();

/**
* 当前使用的网络类型:
* 例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0
NETWORK_TYPE_GPRS GPRS网络 1
NETWORK_TYPE_EDGE EDGE网络 2
NETWORK_TYPE_UMTS UMTS网络 3
NETWORK_TYPE_HSDPA HSDPA网络 8
NETWORK_TYPE_HSUPA HSUPA网络 9
NETWORK_TYPE_HSPA HSPA网络 10
NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4
NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5
NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6
NETWORK_TYPE_1xRTT 1xRTT网络 7
*/
int netWorkType = telephonyManager.getNetworkType();

/**
* 手机类型:
* 例如: PHONE_TYPE_NONE 无信号
PHONE_TYPE_GSM GSM信号
PHONE_TYPE_CDMA CDMA信号
*/
int phoneType = telephonyManager.getPhoneType();

/**
* 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*/
String simOperator = telephonyManager.getSimOperator();

/**
* 服务商名称:
* 例如:中国移动、联通
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*/
String simOperatorName = telephonyManager.getSimOperatorName();

/**
* SIM的状态信息:
* SIM_STATE_UNKNOWN 未知状态 0
SIM_STATE_ABSENT 没插卡 1
SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2
SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3
SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4
SIM_STATE_READY 就绪状态 5
*/
int simStat = telephonyManager.getSimState();

/**
* ICC卡是否存在
*/
boolean bl= telephonyManager.hasIccCard();
/**
* 是否漫游:
* (在GSM用途下)
*/
boolean blean = telephonyManager.isNetworkRoaming();
/**
* 附近的电话的信息:
* 类型:List<NeighboringCellInfo>
* 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES
*/
List<NeighboringCellInfo> list = telephonyManager.getNeighboringCellInfo();//List<NeighboringCellInfo>
/**
* 获取数据连接状态
*/
int dataActivty = telephonyManager.getDataActivity();

}


更多相关文章

  1. android的selector背景选择器
  2. Android充分利用系统状态栏,达到全屏显示,fitSystemWindow失效问题
  3. Android安全机制介绍
  4. Android实时监听网络状态(1)
  5. Android支持的资源
  6. 浅谈android的selector背景选择器
  7. android notification
  8. Android中的Selector
  9. 详解 Android(安卓)的 Activity 组件

随机推荐

  1. 安卓开发学习之012 TextView高级应用
  2. android studio gradle自动签名构建实现
  3. android UI进阶之弹窗的使用(2)--实现通讯
  4. android & Linux uevent机制
  5. Android应用程序设计——入门配置
  6. Android菜鸟的成长笔记(1)——Android开发
  7. App Inventor for Android(安卓)- 大家都
  8. Android下USB Accessory的实现分析
  9. Android中字体颜色的设置
  10. [Android] 开发资料收集:动态加载、插件化