按照正常的獲取在Android 8.0 之前都是可以拿到我們的Imei碼的,就是廣爲流傳的那些形式,我就意義贅述了,到了Android 9.0 之後就出現了部分手機廠商的機型獲取不到我們的IMEI碼,例如 '‘一加’'等廠商,而且其他廠商的在獲取的時候也需要獲取我們的
READ_PHONE_STATE權限
不過也能在大部分的手機上通用;也不算太大的缺點,但是到了我們的Android 10 開始,谷歌官方對我們的獲取Imei進行了更加嚴格的限制,基本上無法拿到,我們的APP有需要做單點登錄,需要設備唯一的標識,只能另尋他法;
網絡上其實有很多其他的方法包括,使用ANDROID_ID,使用UUID+其他 保存在sd卡,以及MAC的方法,我就是使用的最後一種,廢話不多說,上代碼
//獲得獨一無二的Psuedo ID
public static String getUniquePsuedoID() {
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
Build.USER.length() % 10; //13 位
try {
serial = Build.class.getField("SERIAL").get(null).toString();
//API>=9 使用serial號
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一個初始化
serial = "serial"; // 隨便一個初始化
}
//使用硬件信息拼湊出來的15位號碼
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}
,然後在需要的地方直接調用此方法,就可以拿到一個唯一碼了;
後記
前一段時間,谷歌官方發佈了Android R 也就是11,裏面更新了很多東西,其中對於MAC的獲取也做出了更嚴格的限制,不過目前還沒到beta,MAC也還能使用.