最近接到用户反馈无法登录的情况越来越多,因为我们的app设计上是不能换手机用,也就是绑定了唯一的设备ID。从反馈上来看,有一个线索是大部分是双卡双待的用户出现这个问题,并且切换过SIM卡。看来getDeviceId这个方法在双卡双待手机上获取IMEI还是有问题的。
getDeviceId方式的注释:
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.
注释上已经说明了获取的IMEI不会绝对得唯一,GSM CDMA是sim卡网络制式,也就说getDeviceId会根据网络制式返回不同的IMEI,那我们要修正这个问题,就要获取所有的IMEI。继续看文档,果然,发现API版本23新增了一个方法 public String getDeviceId(int slotId),参数slotId文档没有详细写应该怎么填,查看源码发现如下一段常量。
/** No phone radio. */
public static final int PHONE_TYPE_NONE = PhoneConstants.PHONE_TYPE_NONE;
/** Phone radio is GSM. */
public static final int PHONE_TYPE_GSM = PhoneConstants.PHONE_TYPE_GSM;
/** Phone radio is CDMA. */
public static final int PHONE_TYPE_CDMA = Pho