[Android] 擷取Android裝置的唯一識別碼|裝置號|序號|UUID

來源:互聯網
上載者:User

 

如何擷取一個能唯一標識每台Android裝置的序號?

這個問題有很多答案,但是他們中的大部分只在某些情況下有效。

根據測試:

  • 所有的裝置都可以返回一個 TelephonyManager.getDeviceId()
  • 所有的GSM裝置 (測試裝置都裝載有SIM卡) 可以返回一個TelephonyManager.getSimSerialNumber()
  • 所有的CDMA 裝置對於 getSimSerialNumber() 卻返回一個空值!
  • 所有添加有Google賬戶的裝置可以返回一個 ANDROID_ID
  • 所有的CDMA裝置對於 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在設定時添加了Google賬戶)
  • 目前尚未測試的:沒有SIM卡的GSM裝置、沒有添加Google賬戶的GSM裝置、處于飛行模式的裝置。

所以如果你想得到裝置的唯一序號, TelephonyManager.getDeviceId() 就足夠了。但很明顯暴露了DeviceID會使一些使用者不滿,所以最好把這些id加密了。實際上加密後的序號仍然可以唯一的識別該裝置,並且不會明顯的暴露使用者的特定裝置,例如,使用 String.hashCode() ,結合UUID:

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);    final String tmDevice, tmSerial, tmPhone, androidId;    tmDevice = "" + tm.getDeviceId();    tmSerial = "" + tm.getSimSerialNumber();    androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);    UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());    String uniqueId = deviceUuid.toString();

最後的deviceID可能是這樣的結果: 00000000-54b3-e7c7-0000-000046bffd97

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.