android獲取裝置唯一碼

2021-09-29 02:35:28 字數 3179 閱讀 5649

android獲取裝置唯一碼,最唯一的應該是imei號,全網唯一,但是有時候不一定可以獲取到,這時候可以通過獲取其他id來代替,

獲取cpu串碼,裝置序列號、androidid,pesudouniqueid(),mac位址,藍芽mac位址,這幾個id裡面獲取只要獲取到乙個位址就可以使用,如果最後實在是上面的id都沒有獲取到,那只能生產乙個uuid,該id表示同一時空下全世界唯一id。

public class deviceidutils

onlyid = getsnid();

//獲取裝置序列號不為空,直接返回

if (!timeutils.isempty(onlyid))

onlyid = getimei(context);

//獲取imei號不為空,直接返回

if (!timeutils.isempty(onlyid))

onlyid = getandroidid(context);

//獲取androidid號不為空,直接返回

if (!timeutils.isempty(onlyid))

onlyid = getpesudouniqueid();

//獲取unique號不為空,直接返回

if (!timeutils.isempty(onlyid))

//        onlyid = getwlanmacaddress(context);

//獲取網路mac不為空,直接返回

//        if (!timeutils.isempty(onlyid))

//        onlyid = getbtmacaddress();

//        //獲取藍芽mac號不為空,直接返回

//        if (!timeutils.isempty(onlyid))

//生成uuid

onlyid = getuuid();

return onlyid;

}/**

* 得到全域性唯一uuid

*/public static string getuuid()

/*** the imei: 僅僅只對android手機有效

* 採用此種方法,需要在androidmanifest.xml中加入乙個許可:android.permission.read_phone_state,並且用

* 戶應當允許安裝此應用。作為手機來講,imei是唯一的,它應該類似於 359881030314356(除非你有乙個沒有量產的手

* 機(水貨)它可能有無效的imei,如:0000000000000)。

** @return imei

*/public static string getimei(context context) catch (exception e)

log.d(tag, "getimei: imei " + imei);

return imei;

}//獲取裝置序列號

public static string getsnid() catch (exception ignored)

return str;

}/**

* 獲取cpu串碼

** @return

*/public static string getcpuname()

} else

}} catch (ioexception ex)

return cpuaddress;

}/**

* the android id

* 通常被認為不可信,因為它有時為null。開發文件中說明了:這個id會改變如果進行了出廠設定。並且,如果某個

* andorid手機被root過的話,這個id也可以被任意改變。無需任何許可。

** @return androidid

*/public static string getandroidid(context context) catch (exception e)

log.d(tag, "getandroidid: " + str);

return str;

}public static string getserialnum() catch (exception e)

log.d(tag, "getserialnum: " + serialnumber);

return serialnumber;

}/**

* pseudo-unique id, 這個在任何android手機中都有效

* 有一些特殊的情況,一些如平板電腦的設定沒有通話功能,或者你不願加入read_phone_state許可。而你仍然想獲得唯

* 一串行號之類的東西。這時你可以通過取出rom版本、製造商、cpu型號、以及其他硬體資訊來實現這一點。這樣計算出

* 來的id不是唯一的(因為如果兩個手機應用了同樣的硬體以及rom 映象)。但應當明白的是,出現類似情況的可能性基

* 本可以忽略。大多數的build成員都是字串形式的,我們只取他們的長度資訊。我們取到13個數字,並在前面加上「35

* 」。這樣這個id看起來就和15位imei一樣了。

** @return pesudouniqueid

*/public static string getpesudouniqueid()

/*** the wlan mac address string

* 是另乙個唯一id。但是你需要為你的工程加入android.permission.access_wifi_state 許可權,否則這個位址會為

* null。returns: 00:11:22:33:44:55 (這不是乙個真實的位址。而且這個位址能輕易地被偽造。).wlan不必開啟,

* 就可讀取些值。

** @return m_szwlanmac

*/public static string getwlanmacaddress(context context)

/*** 獲取藍芽mac位址

* 只在有藍芽的裝置上執行。並且要加入android.permission.bluetooth 許可權.returns: 43:25:78:50:93:38 .

* 藍芽沒有必要開啟,也能讀取。

** @return m_szbtmac

*/public static string getbtmacaddress()

}

獲取裝置唯一碼

有些企業內部程式需要對訪問程式的真機做白名單限制,對於裝置唯一碼,蘋果做出了如下限制 1.從ios7之後,獲取mac位址會返回固定值 02 00 00 00 00 00 2.試圖獲取udid 裝置唯一碼 的程式不會通過蘋果的審核。我們可以在程式第一次啟動時生成這個id並儲存起來,但是,如果使用者刪除...

生成唯一碼

根據年月日 隨機數獲取19位的資料序列 public static long getrandomid 根據年月日 隨機數獲取19位的資料序列 public static long gethashcodeid var num 19 s.length var f datetime.now.tostrin...

android 獲取裝置唯一標識碼

按照正常的獲取在android 8.0 之前都是可以拿到我們的imei碼的,就是廣為流傳的那些形式,我就不一 一贅述了,到了android 9.0 之後就出現了部分手機廠商的機型獲取不到我們的imei碼,例如 一加 等廠商,而且其他廠商的在獲取的時候也需要獲取我們的 read phone state...