91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發 - 獲取Android設備的唯一標識碼(Android 6.0或更高)

發布時間:2020-07-04 23:40:25 來源:網絡 閱讀:6975 作者:羅伊德666 欄目:移動開發

在我們的APP開發中,通常需要獲取到設備的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬件的唯一標識,但是在Android6.0之后,Android系統大幅限制了我們獲取設備的硬件信息。

Android6.0之前的方法(已過時)

  1. DEVICE_ID
    通getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()獲取,但是6.0之后必須申請READ_PHONE_STATE,并且獲取到的這個值在不同的廠商和設備中并不可靠。

  2. MAC地址
    這個是無線網卡的MAC地址,這個需要ACCESS_WIFI_STATE權限,并且很多情況下并獲取不到這個值,也并不是十分可靠。

  3. ANDROID_ID
    這個值是當一個新的設備第一次啟動時,或者恢復出廠設置時,系統會生成一個64位的數字,這個值目前(Android4.0之后)已經非常可靠,但是仍有個別廠商的定制系統的BUG,導致這個值返回null。

獲取設備唯一標識的正確姿勢

由于ANDROID_ID的值相對穩定和可靠,并且不需要申請權限,所以我們獲取設備的唯一標識應該使用這個值,同時我們應該考慮到一些極端情況和安全問題。

  1. 獲取ANDROID_ID
public static String getAndroidID() {
    String id = Settings.Secure.getString(
            Utils.getApp().getContentResolver(),
            Settings.Secure.ANDROID_ID
    );
    return id == null ? "" : id;
}
  1. 構造UUID,防止直接暴露ANDROID_ID
private static String getDeviceUUid()
{
   String androidId = DeviceUtils.getAndroidID();
   UUID deviceUuid = new UUID(androidId.hashCode(), ((long)androidId.hashCode() << 32));
   return deviceUuid.toString();
}
  1. 考慮極端情況,我們自己生成一個應用級別的UUID
    這種情況我們需要將生成的UUID保存到SharedPreference中,只要應用不被卸載或者清除數據,這個值就不會變。
private static String getAppUUid() {
   String uuid = SPUtils.getInstance().getString(PREF_KEY_UUID);
   if (TextUtils.isEmpty(uuid)) {
       uuid = UUID.randomUUID().toString();
       //這里需要保存到SharedPreference中
       ...
   }
   return uuid;
}
  1. 將上面的獲取方法封裝到一個方法中
public static String getUUID() {
    String uuid = getDeviceUUid();
    if (TextUtils.isEmpty(uuid)) {
        uuid = getAppUUid();
    }
    return uuid;
}

總結

這些獲取UUID方法非常簡單,并且在應用的開發中可以滿足99%的需求,不需要動態申請權限,也非常可靠,但是在使用時需要清楚其生成過程,以便應用到安全性要求非常高的場景中。

如有更多疑問,請參考我的其它Android相關博客:我的博客地址

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹阳市| 专栏| 合阳县| 昭平县| 溆浦县| 吉水县| 登封市| 崇礼县| 巴楚县| 八宿县| 建瓯市| 平山县| 年辖:市辖区| 颍上县| 阿勒泰市| 攀枝花市| 固镇县| 靖西县| 武功县| 阜南县| 布拖县| 调兵山市| 双峰县| 平江县| 皋兰县| 承德县| 江山市| 盘山县| 高密市| 色达县| 马鞍山市| 泰州市| 芦溪县| 富阳市| 安图县| 西青区| 西贡区| 罗田县| 双城市| 贡嘎县| 乐平市|