欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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