不会有任何问题的,IMEI是手机入网许可证编号(流水号)IMEI只要修改成中国大陆的就可以了!(这个说明你手机是水货哦!不是行货哦!)
它和手机的ISN是有区别的!(isn是为了有利于生产的一个编号)
可以在手机设置中找到应用,点击权限管理,选择权限开启这个imei功能。
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发,Android操作系统最初由Andy Rubin开发,主要支持手机。
Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等,全世界采用这款系统的设备数量已经达到10亿台。
Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android 10),后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。
随着android系统不断升级,android设备的imei号已经越来越难获取了。网上一些推荐会用meid、androidid来代替imei号。但是因为项目推广需要比对渠道那边回传imei号来确认新增。
发现部分机型渠道(eg:快手)可以获取到而我们获取不到,导致无法确认新增。最终在TelephonyManager中找到getDeviceSoftwareVersion()方法。可以变相实现获取imei号(但也会有getDeviceSoftwareVersion获取不到的机型,不过验证渠道那边也获取不到了)。
public static String getIMEI() {
TelephonyManager telephonyManager = (TelephonyManager) BaseApplicationgetAppContext()getSystemService(ContextTELEPHONY_SERVICE);
String imei = null;
if (AndPermissionhasPermissions(BaseApplicationgetAppContext(), ManifestpermissionREAD_PHONE_STATE)) {
try {
if (BuildVERSIONSDK_INT >= BuildVERSION_CODESO) {
imei = telephonyManagergetImei();
if (!TextUtilsisEmpty(imei)) {
return imei;
} else {
String softwareVersion = getDeviceSoftwareVersion();
if (!TextUtilsisEmpty(softwareVersion) && softwareVersionlength() > 14) {
String imeiHead = softwareVersionsubstring(0, 14);
imei = imeiHead + luhn(imeiHead);
return imei;
} else {
return null;
}
}
} else {
return telephonyManagergetDeviceId();
}
} catch (Exception e) {
eprintStackTrace();
}
}
return imei;
}
/
Luhn算法
根据号码获取校验位
@param cardNumber
@return
/
public static int luhn(String cardNumber) {
int totalNumber = 0;
for (int i = cardNumberlength() - 1; i >= 0; i -= 2) {
int tmpNumber = calculate(IntegerparseInt(StringvalueOf(cardNumbercharAt(i))) 2);
if (i == 0) {
totalNumber += tmpNumber;
} else {
totalNumber += tmpNumber + IntegerparseInt(StringvalueOf(cardNumbercharAt(i - 1)));
}
其实是因为getDeviceSoftwareVersion和getImei()拼接规则只有末位两个数不相同,而imei的末位数可以通过luhn算法获取,从而拼接成imei值(自测有效)。
但是毕竟还是有部分机型获取不到imei,可以使用oaid来补充说明。
如果是自己app内部做唯一标识的话可以用meid、androidid或deviceid来代替imei
public static String getUniqueId() {
TelephonyManager telephonyManager = (TelephonyManager) BaseApplicationgetAppContext()getSystemService(ContextTELEPHONY_SERVICE);
if (AndPermissionhasPermissions(BaseApplicationgetAppContext(), ManifestpermissionREAD_PHONE_STATE)) {
if (androidosBuildVERSIONSDK_INT >= BuildVERSION_CODESP) {
欢迎分享,转载请注明来源:品搜搜测评网