首先IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,MEID(Mobile Equipment IDentifier)是全球唯一的56bit移动终端标识号,试了好几台手机发现MEID并不是每一台手机都有的,可直接在手机拨号键处输入“*#06#”来查询,不一定有MEID,但肯定是有IMEI的。
进入正题
想要读取imei,首先需要提醒用户开启电话的权限
String[] perms = new String[]{Manifest.permission.READ_PHONE_STATE};
下面上代码
public static String getIMEI(Context context) {
StringBuffer sb = new StringBuffer();
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i < telephonyManager.getPhoneCount(); i++) {
if (i > 0) {
sb.append(",");
}
sb.append(telephonyManager.getDeviceId(i));//version codes>23时,IMEI可能不止一个
}
} else {
sb.append(telephonyManager.getDeviceId());
}
return sb.toString();
}
大概解释一下:第一次获取到手机的imei可能不同的手机不止一个,所以如果有多个的话用“,”分开,拼接一下,然后以String的形式去走接口上传
public static List<String> getIMEIs(Context context) {
List<String> imeis = new ArrayList<>();
String deviceId;
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager
.PERMISSION_GRANTED) {
return null;
}
for (int i = 0; i < telephonyManager.getPhoneCount(); i++) {
deviceId = telephonyManager.getDeviceId(i);
if (!TextUtils.isEmpty(deviceId)) {
imeis.add(deviceId);
}
}
} else {
deviceId = telephonyManager.getDeviceId();
if (!TextUtils.isEmpty(deviceId)) {
imeis.add(deviceId);
}
}
return imeis;
}
第二次登录的时候直接拿已经上传的的imei和getIMEIs(Context context)作比较,遍历getIMEIs(),判断请求的imei是否包含getIMEIs()的某一个imei,如果包含,直接登录,换言之,提示绑定的不是该手机。
注意:这种获取imei的方法只适用于android10版本以下的手机,android10及以上无法无法获取imei。
到这就完了,如果发现有问题欢迎指正,或有更好方法的给我留言,谢谢!
最后
开通了个公众号,扫码关注一下,可以获得超过1个G的免费PDF书籍学习资料,并且可以及时收到我分享的内容哦!