獲取android手機唯一標識
阿新 • • 發佈:2019-01-03
因為很多軟體都有這個功能,所以說是非常重要的,比如說一個使用者賬號只能繫結3個裝置,那麼得到裝置的唯一標示將是非常重要的。
我猜那麼你肯定首先想到的就是得到裝置IMEI,
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
String IMEI= telephonyManager.getDeviceId();
通過getDeviceId
獲取的為IMEI
MEID
和ESN
這種方法我以前也在用,但是用了後你會發現,它其實有很多缺點:
- 需要android.permission.READ_PHONE_STATE許可權,有可能被使用者拒絕授權。
- 有的手機可能拿不到DeviceId。
其實我們可以自己組建唯一標識,比如說用build類獲取手機的所有配置資訊。
主機板: Build.BOARD; 系統啟動程式版本號: Build.BOOTLOADER; 系統定製商:Build.BRAND; cpu指令集:Build.CPU_ABI; cpu指令集2:Build.CPU_ABI2; 設定引數:Build.DEVICE; 顯示屏引數:Build.DISPLAY; 無線電韌體版本:Build.getRadioVersion(; 硬體識別碼:Build.FINGERPRINT; 硬體名稱:Build.HARDWARE; HOST:Build.HOST; 修訂版本列表:Build.ID; 硬體製造商:Build.MANUFACTURER; 版本:Build.MODEL; 硬體序列號:Build.SERIAL; 手機制造商:Build.PRODUCT; 描述Build的標籤:Build.TAGS; TIME:Build.TIME; builder型別:Build.TYPE; USER:Build.USER;
所以我後面寫了這個方法,目前來看能保持唯一性,直接獲取手機所有的資訊並且組成一個新的字串。
public static String getDeviceID() { String deviceID= ""; try{ //一共13位 如果位數不夠可以繼續新增其他資訊 m_szDevIDShort= ""+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; }catch (Exception e){ return ""; } return deviceID; }