目錄表
- 設備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也是變化的。