获取imeiandroid
‘壹’ 如何获取Android唯一标识
我刚好做过这方面的研究,直接拿我之前做过的笔记了,欢迎关注、采纳、持续交流Andorid问题
一共有 五大方法:(推荐第五种)
1.设备ID(DEVICE_ID)
Android系统为开发者提供的用于标识手机设备的标识码。它会根据不同的手机设备返回IMEI,MEID或者ESN码(IMEI是手机的身份证,MEID是CDMA制式(电信运营的)的专用身份证;IMEI是15位,MEID是14位)。
l获取方法
java">TelephonyManagertm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
StringDEVICE_ID=tm.getDeviceId();
l注意点:
没有通话的硬件功能,无法获得DEVICE_ID。
需要READ_PHONE_STATE权限,部分用户会怀疑软件的安全性。
(Android 6.0 以上需要用户手动赋予该权限)
厂商定制系统中的Bug,可能是一串0或者一串*号。
2. SIM卡序列号
不同SIM卡的序列号不同
l获取办法
TelephonyManagertm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
StringsimSerialNum=tm.getSimSerialNumber();
l注意点
手机未装SIM卡或者不可用时,返回 null.
也需要 READ_PHONE_STATE 权限。
3. 设备序列号(SERIAL)
l获取办法
StringserialNum=android.os.Build.SERIAL;
l注意点
所有的CDMA 设备对于却返回一个空值
Android系统2.3版本以上
4. ANDROID_ID
在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。
l获取办法
StringANDROID_ID=System.getString(getContentResolver(),Settings.System.ANDROID_ID);
l注意点
定制系统的Bug:不同的设备可能会产生相同的,有些设备返回的值为null。
在 Android 4.2 及以上, 设备启用多用户功能后,每个用户的 Android_ID 不相同。
部分设备的ANDROID_ID和TelephonyManager.getDeviceId()返回相同的值
5. 自定义UUID(本人推荐)
publicclassInstallation{
privatestaticStringsID=null;
="INSTALLATION";
(Contextcontext){
if(sID==null){
Fileinstallation=newFile(context.getFilesDir(),INSTALLATION);
try{
if(!installation.exists())writeInstallationFile(installation);
sID=readInstallationFile(installation);
}catch(Exceptione){
thrownewRuntimeException(e);
}
}
returnsID;
}
(Fileinstallation)throwsIOException{
RandomAccessFilef=newRandomAccessFile(installation,"r");
byte[]bytes=newbyte[(int)f.length()];
f.readFully(bytes);
f.close();
returnnewString(bytes);
}
(Fileinstallation)throwsIOException{
FileOutputStreamout=newFileOutputStream(installation);
Stringid=UUID.randomUUID().toString();
out.write(id.getBytes());
out.close();
}
}
‘贰’ 如何获取Android唯一标识
唯一ID即IMEI,获取方式如下代码:
TelephonyManagerTelephonyMgr=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
StringszImei=TelephonyMgr.getDeviceId();
‘叁’ android 代码获取IMEI,IMSI都为空,怎么解决
Android获取IMSI和IMEI :
IMSI是一个唯一的数字,标识了GSM和UMTS 网络里的唯一一个用户.
它存储 在手机的SIM卡里,它会通过手机发送到网络上。
IMEI也是一串唯一的数字,标识了GSM 和UMTS网络里的三星 Galaxy I9100.。
它通常被打印在手机里电池下面的那一面,拨 *#06# 也能看到它。
代码:
这里是你在Android里读出 唯一的 IMSI-ID/IMEI-ID 的方法。
Java:
StringmyIMSI=
android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI
);
//withinmyemulatoritreturns:310995000000000
StringmyIMEI=
android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI
);
//withinmyemulatoritreturns:000000000000000
手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手
机号码的数据写入到sim卡中。sim卡只有唯一的编号,供网络与设备识别那就是imsi号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。
试想,你的sim丢失后,补办一张新的会换号码吗? —不会就是因为在你的手机号码对应的 imsi号在移动运营商中被修改成新sim卡的imsi号码。
这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
/** * 获得手机的一些标志符* *@paramc *@returnString 手机的类型 */
publicStringfetch_status(Contextc){
TelephonyManagertm=(TelephonyManager)c
.getSystemService(Context.TELEPHONY_SERVICE);//
Stringstr="";
StringIMSI=tm.getSubscriberId();
str+="DeviceId(IMEI)="+tm.getDeviceId()+"/n";
str+="DeviceSoftwareVersion="+tm.getDeviceSoftwareVersion()
+"/n";
str+="Line1Number="+tm.getLine1Number()+"/n";
return str;
}
‘肆’ 安卓应用软件启动时获取手机的IMEI IMSI 本机号码有什么作用
一个是统计你正在使用它们的软件,统计用户数量,第二就是有针对性的记录你的imei号码平时多浏览什么内容,然后可以针对爱好投放广告