android10 适配方案

目录表

  • 设备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也是变化的。

待续

mjzuo博客列表传送阵

发布了63 篇原创文章 · 获赞 191 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/MingJieZuo/article/details/102672603