美文网首页
getDeviceId()获取设备号IMEI、MEID、ESN

getDeviceId()获取设备号IMEI、MEID、ESN

作者: 全球顶尖伪极客 | 来源:发表于2018-09-07 18:27 被阅读0次

网络请求的时候需要根据设备号id传参,但是服务端后台收到的有时候为空,服务端的存储就为1个0 。而手机设备号获取与手机本身注册的网相关

本人经测试情况魅蓝note5、1:全网通、2张联通卡、获取结果为IMEI1的值。

通过查询API调用getDeviceId()源码可知

通过getDeviceId获取的为IMEIMEIDESN

  /**
     * Returns the unique device ID, for example, the IMEI for GSM and the MEID
     * or ESN for CDMA phones. Return null if device ID is not available.
     *
     * @deprecated Use (@link getImei} which returns IMEI for GSM or (@link getMeid} which returns
     * MEID for CDMA.
     */
    @Deprecated
    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
    public String getDeviceId() {
        try {
            ITelephony telephony = getITelephony();
            if (telephony == null)
                return null;
            return telephony.getDeviceId(mContext.getOpPackageName());
        } catch (RemoteException ex) {
            return null;
        } catch (NullPointerException ex) {
            return null;
        }
    }

经查阅可知:
参考来自:https://www.jianshu.com/p/740e9116281f

IMEI(International Mobile Equipment Identity) 是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台移动电话机一一对应,而且该码是全世界唯一的。
MEID 移动设备识别码(Mobile Equipment Identifier)是CDMA手机的身份识别码,也是每台CDMA手机或通讯平板唯一的识别码。

移动:2G使用 GSM, 3G使用 TD-SCDMA 4G使用TD-LTE
联通:2G使用 GSM, 3G使用 WCDMA 4G使用TD-LTE、FDD-LTE
电信:2G使用 CDMA,3G使用 CDMA2000 4G使用TD-LTE、FDD-LTE

所以,IMEI是联通移动手机的标识,MEID是电信手机的标识。(?待考证:因为官方说的只是GSM和CDMA,而2g网络基本上不存在了吧?)

参考来自:https://blog.csdn.net/zichuanzhu/article/details/54693687(未考究)
正常情况下 getDeviceId()这个方法的返回值和当时卡槽注册的phone有关

  • 如果注册的是CDMA 返回的是MEID(电信)
  • 如果注册是的GMS网络,返回的是IMIE
  • 如果一直没插卡 没注册phone默认获取IMEI

1.不插卡怎么读 :不插卡的话 会保持上一次插卡是的phone状态

  • 插卡:即上一次插得是CDMA的,获取的是MEID (电信)
  • 插得是GMS的获取的是IMEI
  • 如果之前一直没有插过卡 默认获取IMEI

2.插一个怎么读

  • 插得是CDMA卡获取MEID(电信)
  • 插得是GMS卡获取的是IMEI
  • 不插卡的卡槽同问题1

插两个怎么读 ?哪个,实践出真理。

  • 哪个卡槽插得是CDMA卡获取的是MEID (电信)
  • 哪个卡槽插得是GMS卡获取的是IMEI

插了再拔出来怎么读

  • 插出来后保持上一次的状态 同问题1

移动联通怎么读?

`slotIndex`看源码估计就是?
  /**
     * Get slotIndex associated with the subscription.
     * @return slotIndex as a positive integer or a negative value if an error either
     * SIM_NOT_INSERTED or < 0 if an invalid slot index
     * @hide
     */
    public static int getSlotIndex(int subId) {
        if (!isValidSubscriptionId(subId)) {
            if (DBG) {
                logd("[getSlotIndex]- fail");
            }
        }

        int result = INVALID_SIM_SLOT_INDEX;

        try {
            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
            if (iSub != null) {
                result = iSub.getSlotIndex(subId);
            }
        } catch (RemoteException ex) {
            // ignore it
        }

        return result;

    }

/**
     * Returns the IMEI (International Mobile Equipment Identity). Return null if IMEI is not
     * available.
     *
     * @param slotIndex of which IMEI is returned
     */
    @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;
        }
    }

  • 建议统一调用getimei(int)这个接口 这个接口不管手机注册的什么网络 均返回IMEI不会根据插的卡而改变返回值。

电信怎么读

  /**
     * Returns the MEID (Mobile Equipment Identifier). Return null if MEID is not available.
     *
     * @param slotIndex of which MEID is returned
     */
    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
    public String getMeid(int slotIndex) {
        ITelephony telephony = getITelephony();
        if (telephony == null) return null;

        try {
            return telephony.getMeidForSlot(slotIndex, getOpPackageName());
        } catch (RemoteException ex) {
            return null;
        } catch (NullPointerException ex) {
            return null;
        }
    }

相关文章

网友评论

      本文标题:getDeviceId()获取设备号IMEI、MEID、ESN

      本文链接:https://www.haomeiwen.com/subject/arzcgftx.html