
首先,添加权限:
<uses-permission android:name="androidpermissionREAD_PHONE_STATE"/>
有了权限之后才能使用 TelephonyManager ,不然会报没有权限的错误。
TelephonyManager telephonyManager = (TelephonyManager)thisgetSystemService( ContextTELEPHONY_SERVICE);
//获取本机MIEI号码(仅手机存在)
String deviceId = telephonyManagergetDeviceId();
String sn = telephonyManagergetSimSerialNumber();
//获取本机电话号码
String phonenumber = telephonyManagergetLine1Number();
获取本机号码:
//获取本机型号
String phonetype = androidosBuildMODEL;
随着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) {
MEID 移动设备识别码(Mobile Equipment Identifier)是CDMA手机的身份识别码,也是每台CDMA手机或通讯平板唯一的识别码,这想必就是你理解的设备号。
在手机拨号盘中输入*#06#,即可d出MEID即唯一的设备识别码。
而设备的序列号查看方法则各不相同,以小米手机为例:
1打开“设置”,进入“我的设置”
2在“我是设备”中找到“全部参数”,并点击进入
3拉到页面最下面,找到“状态信息”并点击进入
4此时在“状态信息”页面就可以看到“序列号”了
其他品牌手机基本上大同小异,具体的序列号查询方法也可以咨询相应品牌手机客服寻求帮助。
MODEL 应该就是吧
Logd("build","BOARD:" + BuildBOARD);
Logd("build","BOOTLOADER:" + BuildBOOTLOADER);
Logd("build","BRAND:" + BuildBRAND);
Logd("build","CPU_ABI:" + BuildCPU_ABI);
Logd("build","CPU_ABI2:" + BuildCPU_ABI2);
Logd("build","DEVICE:" + BuildDEVICE);
Logd("build","DISPLAY:" + BuildDISPLAY);
Logd("build","FINGERPRINT:" + BuildFINGERPRINT);
Logd("build","HARDWARE:" + BuildHARDWARE);
Logd("build","HOST:" + BuildHOST);
Logd("build","ID:" + BuildID);
Logd("build","MANUFACTURER:" + BuildMANUFACTURER);
Logd("build","MODEL:" + BuildMODEL);
Logd("build","PRODUCT:" + BuildPRODUCT);
Logd("build","RADIO:" + BuildRADIO);
Logd("build","TAGS:" + BuildTAGS);
Logd("build","TIME:" + BuildTIME);
Logd("build","TYPE:" + BuildTYPE);
Logd("build","UNKNOWN:" + BuildUNKNOWN);
Logd("build","USER:" + BuildUSER);
Logd("build","VERSIONCODENAME:" + BuildVERSIONCODENAME);
Logd("build","VERSIONINCREMENTAL:" + BuildVERSIONINCREMENTAL);
Logd("build","VERSIONRELEASE:" + BuildVERSIONRELEASE);
Logd("build","VERSIONSDK:" + BuildVERSIONSDK);
Logd("build","VERSIONSDK_INT:" + BuildVERSIONSDK_INT);
以上就是关于如何获得Android设备名称全部的内容,包括:如何获得Android设备名称、android imei获取、如何获取安卓手机设备号和序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)