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博客列表傳送陣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章