在我们的APP开发中,通常需要获取到设备的唯一标识。在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬件信息。

Android6.0之前的方法(已过时)

  1. DEVICE_ID
    通getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()获取,但是6.0之后必须申请READ_PHONE_STATE,并且获取到的这个值在不同的厂商和设备中并不可靠。

  2. MAC地址
    这个是无线网卡的MAC地址,这个需要ACCESS_WIFI_STATE权限,并且很多情况下并获取不到这个值,也并不是十分可靠。

  3. ANDROID_ID
    这个值是当一个新的设备第一次启动时,或者恢复出厂设置时,系统会生成一个64位的数字,这个值目前(Android4.0之后)已经非常可靠,但是仍有个别厂商的定制系统的BUG,导致这个值返回null。

获取设备唯一标识的正确姿势

由于ANDROID_ID的值相对稳定和可靠,并且不需要申请权限,所以我们获取设备的唯一标识应该使用这个值,同时我们应该考虑到一些极端情况和安全问题。

  1. 获取ANDROID_ID
public static String getAndroidID() {    String id = Settings.Secure.getString(            Utils.getApp().getContentResolver(),            Settings.Secure.ANDROID_ID    );    return id == null ? "" : id;}
  1. 构造UUID,防止直接暴露ANDROID_ID
private static String getDeviceUUid(){   String androidId = DeviceUtils.getAndroidID();   UUID deviceUuid = new UUID(androidId.hashCode(), ((long)androidId.hashCode() << 32));   return deviceUuid.toString();}
  1. 考虑极端情况,我们自己生成一个应用级别的UUID
    这种情况我们需要将生成的UUID保存到SharedPreference中,只要应用不被卸载或者清除数据,这个值就不会变。
private static String getAppUUid() {   String uuid = SPUtils.getInstance().getString(PREF_KEY_UUID);   if (TextUtils.isEmpty(uuid)) {       uuid = UUID.randomUUID().toString();       //这里需要保存到SharedPreference中       ...   }   return uuid;}
  1. 将上面的获取方法封装到一个方法中
public static String getUUID() {    String uuid = getDeviceUUid();    if (TextUtils.isEmpty(uuid)) {        uuid = getAppUUid();    }    return uuid;}

总结

这些获取UUID方法非常简单,并且在应用的开发中可以满足99%的需求,不需要动态申请权限,也非常可靠,但是在使用时需要清楚其生成过程,以便应用到安全性要求非常高的场景中。

如有更多疑问,请参考我的其它Android相关博客:我的博客地址

更多相关文章

  1. Android(安卓)NDK 开发 —— 从 Assets 文件夹加载图片并上传纹
  2. ListView去掉分割线
  3. [转]Android蓝牙开发浅谈
  4. Android界面绘制_canvas解析
  5. Android(安卓)Studio—— jni初体验(一)
  6. Android资源文件分析
  7. Activity的生命周期,状态保存,窗口显示,取得返回结果,安全退出
  8. Android(安卓)事件传递机制实测
  9. Android(安卓)本地代码如何输出日志

随机推荐

  1. android 中文字体向上偏移解决方案
  2. Android socket和Tomcat等网络连接不上问
  3. Android Apk反编译得到Java源代码
  4. Android 使用Sharedpreference存储数据
  5. 08 Android 使用Thread操作UI
  6. 有了 Nook2Android,Nook Color 随时变身
  7. [Android]Ziplign打包最后一步
  8. Android系统刷机常用名词解析
  9. 中国Android软件商店摘要(2011-1-21统计)
  10. SimpleSNS for android 第1周发布