Android系统信息获取 之十:移动网络相关信息获取
Android平台移动网络信息主要是通过TelephonyManager类来获取的,通过前面对TelephonyManager的观察Android系统信息获取 之九:TelephonyManager类,我们能够发现通过TelephonyManager我们可以获取大概五类信息,分别是:
一、 数据连接状态
二、 移动网络类型
三、 手机制式类型
四、 SIM卡状态
五、其它信息
具体信息获取如下:
// 获取telephony系统服务,用于取得SIM卡和网络相关信息
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/**
* 电话状态:
* 1.tm.CALL_STATE_IDLE=0 无活动
* 2.tm.CALL_STATE_RINGING=1 响铃
* 3.tm.CALL_STATE_OFFHOOK=2 摘机
*/
mTelephonyManager.getCallState();//int
/**
* 电话方位:
* 返回当前移动终端的位置
*/
mTelephonyManager.getCellLocation();//CellLocation
/**
* 请求位置更新,如果更新将产生广播,
* 接收对象为注册LISTEN_CELL_LOCATION的对象,
* 需要的permission名称为ACCESS_COARSE_LOCATION。
*/
CellLocation location = mTelephonyManager.getCellLocation();//CellLocation
location.requestLocationUpdate();
/**
* 获取数据活动状态
*
* DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据
* DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据
* DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据
* DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受
*/
mTelephonyManager.getDataActivity();
/**
* 获取数据连接状态
*
* DATA_CONNECTED 数据连接状态:已连接
* DATA_CONNECTING 数据连接状态:正在连接
* DATA_DISCONNECTED 数据连接状态:断开
* DATA_SUSPENDED 数据连接状态:暂停
*/
mTelephonyManager.getDataState();
/**
* 唯一的设备ID:
* GSM手机的 IMEI 和 CDMA手机的 MEID.
* Return null if device ID is not available.
*/
mTelephonyManager.getDeviceId();//String
/*
* 设备的软件版本号:
* 返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。
* 例如:the IMEI/SV(software version) for GSM phones.
* Return null if the software version is not available.
*/
mTelephonyManager.getDeviceSoftwareVersion();//String
/*
* 手机号:
* 返回手机号码,对于GSM网络来说即MSISDN
* GSM手机的 MSISDN.
* Return null if it is unavailable.
*/
mTelephonyManager.getLine1Number();//String
/**
* 附近的电话的信息:
* 返回当前移动终端附近移动终端的信息
* 类型:List<NeighboringCellInfo>
* 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES
*/
mTelephonyManager.getNeighboringCellInfo();//List<NeighboringCellInfo>
List<NeighboringCellInfo> infos=mTelephonyManager.getNeighboringCellInfo();
for(NeighboringCellInfo info:infos){
//获取邻居小区号
int cid=info.getCid();
//获取邻居小区LAC,LAC: 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。
info.getLac();
info.getNetworkType();
info.getPsc();
//获取邻居小区信号强度
info.getRssi();
}
/**
* 获取ISO标准的国家码,即国际长途区号。
* 注意:仅当用户已在网络注册后有效。
* 在CDMA网络中结果也许不可靠。
*/
mTelephonyManager.getNetworkCountryIso();//String
/**
* MCC+MNC(mobile country code + mobile network code)
* 返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
* 注意:仅当用户已在网络注册时有效。
* 在CDMA网络中结果也许不可靠。
*/
mTelephonyManager.getNetworkOperator();//String
/**
* 返回移动网络运营商的名字(SPN)
* 按照字母次序的current registered operator(当前已注册的用户)的名字
* 注意:仅当用户已在网络注册时有效。
* 在CDMA网络中结果也许不可靠。
*/
mTelephonyManager.getNetworkOperatorName();//String
/**
* 当前使用的网络类型:
* 例如: 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
*
* 在中国,联通的3G为UMTS或HSDPA,
* 移动和联通的2G为GPRS或EGDE,
* 电信的2G为CDMA,电信的3G为EVDO
*/
mTelephonyManager.getNetworkType();//int
/**
* 返回移动终端的类型
* 手机类型:
* 例如: PHONE_TYPE_NONE 无信号 ,手机制式未知
PHONE_TYPE_GSM GSM信号 ,手机制式为GSM,移动和联通
PHONE_TYPE_CDMA CDMA信号 ,手机制式为CDMA,电信
*/
mTelephonyManager.getPhoneType();//int
/**
* 返回SIM卡提供商的国家代码
* Returns the ISO country code equivalent for the SIM provider's country code.
* 获取ISO国家码,相当于提供SIM卡的国家码。
*
*/
mTelephonyManager.getSimCountryIso();//String
/**
* 返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
* Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.
* 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*/
mTelephonyManager.getSimOperator();//String
/**
* 服务商名称:
* 例如:中国移动、联通
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*/
mTelephonyManager.getSimOperatorName();//String
/**
* 返回SIM卡的序列号(IMEI)
* SIM卡的序列号:
* 需要权限:READ_PHONE_STATE
*/
mTelephonyManager.getSimSerialNumber();//String
/**
* 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
*/
mTelephonyManager.getSimState();//int
/**
* 返回用户唯一标识,比如GSM网络的IMSI编号
* 唯一的用户ID:
* 例如:IMSI(国际移动用户识别码) for a GSM phone.
* 需要权限:READ_PHONE_STATE
*/
mTelephonyManager.getSubscriberId();//String
/**
* 获取语音信箱号码关联的字母标识。
* 取得和语音邮件相关的标签,即为识别符
* 需要权限:READ_PHONE_STATE
*/
mTelephonyManager.getVoiceMailAlphaTag();//String
/**
* 返回语音邮件号码
* 获取语音邮件号码:
* 需要权限:READ_PHONE_STATE
*/
mTelephonyManager.getVoiceMailNumber();//String
/**
* ICC卡是否存在
*/
mTelephonyManager.hasIccCard();//boolean
/**
* 是否漫游:
* (在GSM用途下)
*/
mTelephonyManager.isNetworkRoaming();//
具体获取的信息太多,封装了一个工具类,供大家参考使用
下载地址如下:移动网络信息获取工具类
注意使用的时候要在AndroidManifest.xml添加相应的权限
<!-- 查看网络信息时需要以下权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 设置APN时需要上面的ACCESS_NETWORK_STATE及以下权限 -->
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!-- 设置网络类型时将要使用 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>