目录表
- 设备id获取的适配方案
设备id适配
在android10 之前,我们通常使用设备的deviceId来当作设备的唯一标识,这在开发中已经算是一个共识了,但是在android10之后呢,系统对于deviceId做了限制,也就是说我们拿不到设备id了。我们该怎样另寻他法而又要兼容既有的项目设备id呢?
适配方案肯定是多样的,在这里只说一种uuid的适配。在android10 之前的系统我们仍然可以通过deviceId来获取设备id,在android10呢,我们则通过UUID.randomUUID() 来获取一个uuid,来当作设备标识,随后我们将该uuid保存到我们的SharedPreferences之内。思路很简单,如果我们获取不到id,那么我们就自己来创造一个id。
这是具体实现的代码片段:
public static String getImei(Context context) {
if (context == null) {
return "";
}
String imei = "";
TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telManager == null) {
imei = getImeiFromSharePrerences(context);
return imei;
}
try {
imei = telManager.getDeviceId();
} catch (SecurityException e) {
imei = "";
} catch (Exception e) {
imei = "";
}
if (imei == null || imei.equals(""))
imei = getImeiFromSharePrerences(context);
return imei;
}
获取deviceId的逻辑是一样的。在获取uuid的时候,如果uuid==null,我们则通过currentTimeMillis 来代替。
public static String getImeiFromSharePrerences(Context context) {
String imei = SharePreferencesUtil.get(context, IMEI_FILE_NSAME, IMEI_KEY);
if (imei == null || imei.equals("")) {
UUID uuid = UUID.randomUUID();
if (uuid == null) {
imei = System.currentTimeMillis() + "";
} else {
imei = uuid.toString();
}
SharePreferencesUtil.save(context, IMEI_FILE_NSAME, IMEI_KEY, imei);
}
return imei;
}
需要注意的是,由于我们只是保存到了SharedPreferences 之内,所以当我们卸载应用重装后,uuid肯定是变化的了。与ios idfv类似,ios应用卸载重装后idfv也是变化的。