Sean's Note: How to get an unique ID from Android device?

2014年8月11日 星期一

How to get an unique ID from Android device?

我們有時候會想要取得一組 UID,來判斷是否為不同的 Android 裝置,除了

Java 本身提供的 UUID,是不是還有其他的方法呢?

以下整理了五種方法(Test with Sony ZL 4.4.2):
  1. UUID
    利用 UUID 類別的方法 randomUUID() 產生一組 128-bit 組成的 UUID:
    String uuid = UUID.randomUUID().toString();
    Log.d(TAG, "UUID: " + uuid); // UUID: faffffe6-a504-4252-b92a-c5b555811123
    

  2. IMEI/MEID/ESN
    利用 TelephonyManager 類別的方法 getDeviceId(),在 GSM 的手機上取得 IMEI 或
    在 CDMA 的手機上取得 MEID 或 ESN 的值:
    // Required permission: android.permission.READ_PHONE_STATE
    
    TelephonyManager telManager=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
    String imei = telManager.getDeviceId();
    Log.d(TAG, "IMEI: " + imei); // IMEI: 3553XXXXXXXXXXX
    
    

  3. Android ID
    取得由靜態類別 Secure 的靜態變數 ANDROID_ID 所表示的 16進位字串。
    String androidID = Secure.getString(this.getBaseContext().getContentResolver(), Secure.ANDROID_ID)
    Log.d(TAG, "Android ID: " + imei); // Android ID: 826458105eXXXXXX
    
    
    Note: 有些廠商的手機的 Android ID 有重複出現的情況,而且一但使用者回復原廠設定
    時,此 ID 有可能會改變。

  4. Wifi Mac
    透過 WifiInfo 類別的方法 getMacAddress() 取得 Mac Address:
    // Required permission: android.permission.ACCESS_WIFI_STATE
    
    WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    Log.d(TAG, "MacAddress: " + wifiInfo.getMacAddress()); // MacAddress: b4:XX:XX:XX:42:fc
    
    
    Note: 沒有開啟 Wifi 時可能會回傳 null,但 Sony ZL 是都要的到。

  5. Serial
    透過 Build 類別的靜態變數 SERIAL 取得手機的硬體序號:
    String buildSerial = android.os.Build.SERIAL;
    Log.d(TAG, "BuildSerial: " + buildSerial); // BuildSerial: EP7323XXXX
    
    
    Note: API Level 9 以上才支援,不保證每台裝置都有。

Ref: http://android-developers.blogspot.tw/2011/03/identifying-app-installations.html

沒有留言:

張貼留言