起因
- 在用户不授权的情况下,无法获取IMEI。
- Android 10 禁止访问设备ID(imei、build serial)。
用法
String duid = DUID.getDUID(context);
下载
方案
-
在8.0以下使用android_id生成UUID。
-
在8.0及以上
首先获取imei,如果能获取到使用imei生成UUID。
获取wifi mac,如果能获取到使用mac生成UUID。
如果imei跟mac都获取失败,仍然使用android_id。
-
如果以上方法都失败,通过UUID随机。
private static String generateDUID(Context context) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { String androidId = getAndroidId(context); if (androidId != null) { return fromString(androidId); } } String imei = DeviceUtils.getImei(context); if (imei != null) { return fromString(imei); } String wifiMac = DeviceUtils.getWifiMacAddress(); if (wifiMac != null) { return fromString(wifiMac); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String androidId = getAndroidId(context); if (androidId != null) { return fromString(androidId); } } return UUID.randomUUID().toString(); }