什么是imei ?
“ IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。 ”[1]
对应GSM手机的 IMEI 和 CDMA手机的 MEID。是唯一设备ID.
在安卓开发中可用于判断是否是虚拟手机号在盗刷。imei号涉及隐私最好加密。
如何获取这个值?
1、在AndroidManifest.xml中增加访问设备状态的权限:
< uses-permission android:name="android.permission.READ_PHONE_STATE" />
2、通过上下文设备获取到TelephonyManager实例,调用getDeviceId方法获取IMEI:
TelephonyManager telephonyManager=(TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
String imei=telephonyManager.getDeviceId();
其他相关参数
SimSerialNumber //获取手机SIM卡的串号(唯一编号ID)
TelephonyManager tm = (TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
String imei = tm.getSimSerialNumber();
imsi //国际移动用户识别码
“ 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;MNC是移动网号码,由两位或者三位数字组成,中国移动的移动网络编码(MNC)为00;用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。”
TelephonyManager tm = (TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = tm.getSubscriberId();
getLine1Number() //获取到手机号码;
“ 手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中。这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。 ”
对应GSM手机的 MSISDN。
TelephonyManager tm = (TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
String tel = tm.getLine1Number();
其他更多:
tm.getCallState(); //int 电话状态
1.tm.CALL_STATE_IDLE=0 无活动
2.tm.CALL_STATE_RINGING=1 响铃
3.tm.CALL_STATE_OFFHOOK=2 摘机
tm.getCellLocation(); //CellLocation 电话方位
tm.getDeviceSoftwareVersion();//String 设备的软件版本号
tm.getNeighboringCellInfo();//List< NeighboringCellInfo> 附近的电话的信息
tm.getNetworkCountryIso();//String 获取ISO标准的国家码,即国际长途区号,仅当用户已在网络注册后有效
tm.getNetworkOperator();//String MCC+MNC(mobile country code + mobile network code),仅当用户已在网络注册时有效
tm.getNetworkOperatorName();//String 按照字母次序的current registered operator(当前已注册的用户)的名字,仅当用户已在网络注册时有效
tm.getNetworkType();//int 当前使用的网络类型
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
tm.getPhoneType();//int
tm.getSimCountryIso();//String 获取ISO国家码,相当于提供SIM卡的国家码
tm.getSimOperator();//String 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
tm.getSimOperatorName();//String 服务商名称, SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
tm.getSimState();//int 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
tm.isNetworkRoaming();// 是否漫游(在GSM用途下)
---
android 6.0对权限做了诸多限制,以上是否仍然行之有效,有待验证.
参考地址:
[1]http://blog.csdn.net/fastthinking/article/details/18001967
[2]http://www.cnblogs.com/luxiaofeng54/archive/2011/03/01/1968063.html