您好,登錄后才能下訂單哦!
在我們的APP開發中,通常需要獲取到設備的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬件的唯一標識,但是在Android6.0之后,Android系統大幅限制了我們獲取設備的硬件信息。
DEVICE_ID
通getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()獲取,但是6.0之后必須申請READ_PHONE_STATE,并且獲取到的這個值在不同的廠商和設備中并不可靠。
MAC地址
這個是無線網卡的MAC地址,這個需要ACCESS_WIFI_STATE權限,并且很多情況下并獲取不到這個值,也并不是十分可靠。
由于ANDROID_ID的值相對穩定和可靠,并且不需要申請權限,所以我們獲取設備的唯一標識應該使用這個值,同時我們應該考慮到一些極端情況和安全問題。
public static String getAndroidID() {
String id = Settings.Secure.getString(
Utils.getApp().getContentResolver(),
Settings.Secure.ANDROID_ID
);
return id == null ? "" : id;
}
private static String getDeviceUUid()
{
String androidId = DeviceUtils.getAndroidID();
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)androidId.hashCode() << 32));
return deviceUuid.toString();
}
private static String getAppUUid() {
String uuid = SPUtils.getInstance().getString(PREF_KEY_UUID);
if (TextUtils.isEmpty(uuid)) {
uuid = UUID.randomUUID().toString();
//這里需要保存到SharedPreference中
...
}
return uuid;
}
public static String getUUID() {
String uuid = getDeviceUUid();
if (TextUtils.isEmpty(uuid)) {
uuid = getAppUUid();
}
return uuid;
}
這些獲取UUID方法非常簡單,并且在應用的開發中可以滿足99%的需求,不需要動態申請權限,也非常可靠,但是在使用時需要清楚其生成過程,以便應用到安全性要求非常高的場景中。
如有更多疑問,請參考我的其它Android相關博客:我的博客地址
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。