獲取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號碼平時多瀏覽什麼內容,然後可以針對愛好投放廣告