android 獲取設備唯一ID

android 獲取設備唯一ID

/**
	 * 獲取設備唯一ID
	 * @return
	 */
	@SuppressLint("MissingPermission")
	public static String getUUID() {

		String serial = null;

		String m_szDevIDShort = "35" +
				Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +

				Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +

				Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +

				Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +

				Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +

				Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +

				Build.USER.length() % 10; //13 位

		try {
			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
				serial = android.os.Build.getSerial();
			} else {
				serial = Build.SERIAL;
			}
//API>=9 使用serial號
			return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
		} catch (Exception exception) {
//serial需要一個初始化
			serial = "serial"; // 隨便一個初始化
		}
//使用硬件信息拼湊出來的15位號碼
		return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
	}

雖然由於唯一標識符權限的更改會導致android.os.Build.getSerial()返回unknown,但是由於m_szDevIDShort是由硬件信息拼出來的,所以仍然保證了UUID的唯一性和持久性。
經測試上述方法完全相同的手機有可能重複,網上還有其他方案比如androidID,但是androidID可能由於機型原因返回null,所以個人任務兩種方法半斤八兩。設備ID的獲取一個版本比一個版本艱難,如果有好的方法歡迎指出。
minSDK警告
在 Android Q 中,當用戶首次運行以 Android 6.0(API 級別 23)以下的版本爲目標平臺的任何應用時,Android平臺會向用戶發出警告。
如果此應用要求用戶授予權限,則系統會先向用戶提供調整應用權限的機會,然後纔會允許此應用首次運行。
谷歌要求運行在Q設備上的應用targetSDK>=23,不然會向用戶發出警告。

轉載出處:https://www.cnblogs.com/liyanyan665/p/11535831.html

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