如何获取一个能唯一标识每台Android设备的序号?

这个问题有很多答案,但是他们中的大部分只在某些情况下有效。

根据测试:

  • 所有的设备都可以返回一个TelephonyManager.getDeviceId()
  • 所有的GSM设备 (测试设备都装载有SIM卡)可以返回一个TelephonyManager.getSimSerialNumber()
  • 所有的CDMA 设备对于getSimSerialNumber()却返回一个空值!
  • 所有添加有谷歌账户的设备可以返回一个ANDROID_ID
  • 所有的CDMA设备对于ANDROID_IDTelephonyManager.getDeviceId()返回相同的值(只要在设置时添加了谷歌账户)
  • 目前尚未测试的:没有SIM卡的GSM设备、没有添加谷歌账户的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

更多相关文章

  1. android零碎要点---android开发者的福音,59_1 Android的界面设计
  2. android的BuildConfig学习
  3. Android操作framebuffer[zz]
  4. 【引用】Android的CTS测试
  5. Ubuntu通过MTP访问Android设备
  6. :Android(安卓)dispatchTouchEvent
  7. android中activity的启动方式
  8. Ubuntu通过MTP访问Android设备
  9. 【Android(安卓)Studio】Android(安卓)Studio 安装及设置

随机推荐

  1. android 学习资料
  2. android播放音乐
  3. android实现xml数据的解析
  4. Android CalendarView 使用
  5. Android DOM解析XML
  6. Android自定义弹窗进度条
  7. ch029 Android service aidl
  8. Accessing internal data on Android dev
  9. Android(安卓)APK反编译
  10. 【工具类】如何通过代码安装一个apk文件