android 获取 imei号码

什么是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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值