android10 设备id获取的适配方案
程序员文章站
2024-02-14 22:50:58
...
在android10 之前,我们通常使用设备的deviceId来当作设备的唯一标识,这在开发中已经算是一个共识了,但是在android10之后呢,系统对于deviceId做了限制,也就是说我们拿不到设备id了。我们该怎样另寻他法而又要兼容既有的项目设备id呢?
UUID适配
适配方案肯定是多样的,在这里只说一种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也是变化的。
推荐阅读
-
android10 设备id获取的适配方案
-
详解Android获取设备唯一ID的几种方式
-
详解Android获取设备唯一ID的几种方式
-
em与rem之间的区别以及移动设备中的rem适配方案
-
移动端适配布局(设备像素,独立像素和css像素的区别,以及自适应适配方案)
-
解决Android10 imei不能获取的问题(适配Android 10)
-
Android设备唯一标识符的获取,适配Android10
-
em与rem之间的区别以及移动设备中的rem适配方案
-
移动端适配布局(设备像素,独立像素和css像素的区别,以及自适应适配方案)
-
解决Android10 imei不能获取的问题(适配Android 10)