关于IMEI、MEID、IMSI

简介

IMEI、MEID都是用于标识一台物理设备的ID信息。在Android 8.0以下系统提供的API中,会根据不同条件返回二者之一的信息。

  • IMEI: 国际移动设备识别码,是区别移动设备的标志,一般用于标识某一台独立的设备,双卡双待的手机有两个IMEI号。
    格式:15位十进制数
  • MEID: 同样也是移动设备标识码,但一般用于CDMA制式的设备上,是ESN码的升级版,只有一个MEID
    格式:14位十六进制数

API

1、SDK26开始,TelephonyManager提供了两个独立的API以获取IMEI和MEID: getImei 、 getMeid 。两个API都可传入下标号获取多个设备号信息,getImei(0)获取卡一的IMEI,getImei(1)获取卡二的IMEI,和SIM卡放在什么位置没有关系,和是哪个运营商的也没有关系,没有SIM卡也可以获取IMEI,getImei()方法获取的IMEI就是卡一的IMEI,卡槽的IMEI是固定的,验证机型小米5S,华为P30,华为Mate10,电信移动卡

/*** Returns the IMEI (International Mobile Equipment Identity). Return null if IMEI is not* available.** <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}* or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).** @param slotIndex of which IMEI is returned*/@SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)public String getImei(int slotIndex) {ITelephony telephony = getITelephony();if (telephony == null) return null;try {return telephony.getImeiForSlot(slotIndex, getOpPackageName());} catch (RemoteException ex) {return null;} catch (NullPointerException ex) {return null;}}

2、SDK26以下的系统获取IMEI或MEID的API为TelephonyManager.getDeviceId(),若当前设备有MEID号,则优先返回MEID,否则返回IMEI号。则获取到的设备ID需要通过长度判断才能知晓该ID为IMEI还是MEID,会存在IMEI获取不到,只能获取MEID的情况。 比如用户插移动联通的卡,返回imei1,imei2,插电信的卡就变成返回imei1,meid了 (PS:这个我没有验证网上博客有人这么写)

SDK26以下:谷歌官方把getImei这个获取IMEI的单独API隐藏起来了,不知道为啥,,如果要调用可以利用反射

/*** Returns the IMEI. Return null if IMEI is not available.** <p>Requires Permission:*   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}** @param slotId of which deviceID is returned*//** {@hide} */  SDK26以下的版本加了个隐藏的注解!!public String getImei(int slotId) {ITelephony telephony = getITelephony();if (telephony == null) return null;try {return telephony.getImeiForSlot(slotId, getOpPackageName());} catch (RemoteException ex) {return null;} catch (NullPointerException ex) {return null;}}

我们公版项目里只用了getDeviceId这个过时的方法来获取IMEI,照理是会存在问题,但是如果只是作为唯一标识的话,获取到的是IMEI还是MEID没差。。。我们只获取IMEI,不获取MEID

 /*** Returns the unique device ID of a subscription, for example, the IMEI for* GSM and the MEID for CDMA phones. Return null if device ID is not available.** <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}* or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).** @param slotIndex of which deviceID is returned** @deprecated Use (@link getImei} which returns IMEI for GSM or (@link getMeid} which returns* MEID for CDMA.*/@Deprecated    SDK28 已经把这个方法标成不推荐使用了。。。!!@SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)public String getDeviceId(int slotIndex) {// FIXME this assumes phoneId == slotIndextry {IPhoneSubInfo info = getSubscriberInfo();if (info == null)return null;return info.getDeviceIdForPhone(slotIndex, mContext.getOpPackageName());} catch (RemoteException ex) {return null;} catch (NullPointerException ex) {return null;}}

关于IMSI,和SIM卡绑定,,双卡手机,getSubscriberId方法不传参读的是主卡的IMSI,当主卡断网或者手动把主卡设置成另一张卡时,读的就是另一张卡的IMSI,和卡槽没有关系,只和当前用的是哪张卡有关系,如图,主副卡切换时读取的IMSI变化,IMEI不变化

关于IMEI、MEID、IMSI相关推荐

  1. 关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)

    2019独角兽企业重金招聘Python工程师标准>>> 关于android各种双卡手机获取imei,imsi的处理(mtk,展讯,高通等) 目前国内对于双卡智能手机的需求还是很大的, ...

  2. 安卓iccid_Android 获取双卡手机IMEI,IMSI,ICCID

    一.首先要添加权限 二.获取主卡的IMEI,IMSI,ICCID /** * Author: liuqiang * Time: 2017-08-14 15:28 * Description: * * ...

  3. IMEI、IMSI、ICCID、SN是什么?意义和区别?通信模组或手机的唯一识别码

    最近在做几个4G移动端的产品,初入行门有很多生涩的名词.想获取一个全球唯一ID作为设备后台管理编号,就扯出了 IMEI.IMSI.ICCID.SN 这几个东西. IMEI IMEI:国际移动设备识别码 ...

  4. 获取双卡手机IMEI、IMSI

    转载请注明出处: 现在 Android 手机越来越多的使用双卡双待,对于安装双卡的手机,有时我们想要获取两张卡的IMSI.IMEI等信息.我们知道 Android 中提供了相关 api,通过类 Tel ...

  5. android+imei+为null,适合Android7.0以上(到9.0)系统,获取 关于手机--状态信息 (如:MAC,IMEI,IMSI,ICCID)...

    这里面也写了获取本机手机号码的代码,但是测试之后发现只有华为nove3 才可以获取到,不过其他一些重要的信息都可以拿到,MAC,IMEI,IMSI,ICCID. 想测试的话,这个是Apk包地址   百 ...

  6. Android 获取手机IMEI 和 IMSI 号

    在做开发时,偶尔会用到 获取手机IMEI 码的操作,这里写了 获取手机IMEI 和 IMSI 的方法,方便需要使用的同学作参考.(- ̄▽ ̄)- 获取手机IMEI: /*** 获取手机IMEI号*/pr ...

  7. Android 获取双卡手机IMEI,IMSI,ICCID

    一.首先要添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 二.获 ...

  8. 【IoT】产品研发:如何获取电信平台NB模组IMEI和IMSI号

    电信平台添加设备时需要IMEI和IMSI号,如何获取呢? IMEI:国际移动设备识别码(15位),用来标识模组. AT+CGSN=1 [09:44:09.263]收←◆AT+CGSN=1 +CGSN: ...

  9. 委托站点中的MIP、RMPN、UMPN、IMEI、IMSI、分别代表是什么意思?

    委托站点中的MIP.RMPN.UMPN.IMEI.IMSI.分别代表是什么意思? 最近工作中,有涉及到这几个专有名称,一开始不太明白意思,其中大部分都是从百度百科那里查到的,这里总结一下. MIP M ...

  10. ICCID IMSI IMEI MEID

    IMEI-----与手机相关 俗称:手机的序列号,一般买的手机都有贴着这个东东,或者用暗码查询(*#06#) 学名:国际移动设备识别码 组成:IMEI = TAC+FAC+SNR+SP MEID--- ...

最新文章

  1. oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
  2. RHEL6下squid代理之正向代理
  3. 让程序员薪资上升一个level的良心十条建议,你有做到吗?
  4. 信用评分卡—信贷准入A卡(逻辑回归)
  5. ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
  6. 光纤收发器的工作原理以及使用方法
  7. UVA10034 Freckles【Kruskal算法+并查集】
  8. 慧荣科技亮相2017纽伦堡国际嵌入式应用展览会,主推采用3D NAND的BGA SSD新产品...
  9. 洛谷1008 三连击
  10. wince 错误 Error: failed PB timebomb check
  11. 使用python调用shell判断当前进程是否存在
  12. php oracle 存储过程,用PHP调用Oracle存储过程
  13. smobiler中实现页面切换_Smobiler学习日志——.Net语言 APP开发平台:如何在webview中加载网页,smobilerwebview...
  14. 项目管理第五章项目范围管理
  15. 伽罗华域, 二维码和CRC
  16. twitter、facebook、pinterest、linkedin 分享代码
  17. Python恶搞搞机程序弹窗
  18. 【嵌入式技术期末复习要点】
  19. 32位系统的虚拟内存空间最大容量
  20. 草根创业,这三大坑千万别踩

热门文章

  1. 【AI TIME】清华大学计算机系学术大佬的知识分享大会!
  2. uniapp App端使用高德地图
  3. Getter和Setter的介绍
  4. CMake中target_compile_features的使用
  5. spyder python 使用_如何在spyder中使用vpython?
  6. 仿ios相机apk_icamera相机下载-icamera仿苹果软件v4.0_5577安卓网
  7. random seed什么意思
  8. Cocos2d-x中设置颜色
  9. js + leetcode刷题:No.914 卡牌分组
  10. 记一次.Net Core通过GDI+在CentOS 7(Docker)环境中绘图报错The type initializer for ‘Gdip‘ threw an exception的问题及处理方式