查看 android 设备号,获取Android设备的唯一识别码|设备号|序号|UUID
轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/xx326664162/article/details/50511283 文章出自:薛瑄的博客
你也可以查看我的其他同類(lèi)文章,也會(huì)讓你有一定的收貨!
1. DEVICE_ID
假設(shè)我們確實(shí)需要用到真實(shí)設(shè)備的標(biāo)識(shí),可能就需要用到DEVICE_ID。它根據(jù)不同的手機(jī)設(shè)備返回IMEI,MEID或者ESN碼,但它在使用的過(guò)程中會(huì)遇到很多問(wèn)題:
1)非手機(jī)設(shè)備: 如果只帶有Wifi的設(shè)備或者音樂(lè)播放器沒(méi)有通話的硬件功能的話就沒(méi)有這個(gè)DEVICE_ID
2)權(quán)限: 獲取DEVICE_ID需要READ_PHONE_STATE權(quán)限,但如果我們只為了獲取它,沒(méi)有用到其他的通話功能,那這個(gè)權(quán)限有點(diǎn)大才小用
3)bug:在少數(shù)的一些手機(jī)設(shè)備上,該實(shí)現(xiàn)有漏洞,會(huì)返回垃圾,如:zeros(全是0)或者asterisks(星號(hào))的產(chǎn)品
使用方法:
TelephonyManager.getDeviceId()//獲取DEVICE_ID
2. Sim Serial Number
所有的GSM設(shè)備 (測(cè)試設(shè)備都裝載有SIM卡) 可以返回一個(gè)TelephonyManager.getSimSerialNumber()
所有的CDMA 設(shè)備對(duì)于 getSimSerialNumber() 卻返回一個(gè)空值!
使用方法:
TelephonyManager.getSimSerialNumber()
3. Serial Number
沒(méi)有電話功能的設(shè)備被要求必須提供這個(gè)序列號(hào)。
有電話功能的,我使用的是華為C8817E,也是有這個(gè)值的。
Android studio 調(diào)試窗口,有一列顯示的就是Serial Number
使用方法:
return android.os.Build.SERIAL
4. MAC ADDRESS
通過(guò)手機(jī)的Wifi或者藍(lán)牙設(shè)備獲取MAC ADDRESS作為DEVICE ID,但是并不建議這么做,因?yàn)?
硬件限制:并不是所有的設(shè)備都有Wifi和藍(lán)牙硬件,硬件不存在自然也就得不到這一信息。
獲取的限制:如果Wifi沒(méi)有打開(kāi)過(guò),是無(wú)法獲取其Mac地址的;而藍(lán)牙是只有在打開(kāi)的時(shí)候才能獲取到其Mac地址。
5. ANDROID_ID
ANDROID_ID是設(shè)備第一次啟動(dòng)時(shí)產(chǎn)生和存儲(chǔ)的64bit的一個(gè)數(shù),當(dāng)設(shè)備被wipe后會(huì)被重置。ANDROID_ID似乎是獲取設(shè)備唯一標(biāo)識(shí)的一個(gè)好選擇,但它也有缺陷:
它在Android <=2.1 or Android >=2.3的版本是可靠、穩(wěn)定的,但在2.2的版本并不是100%可靠的
在主流廠商生產(chǎn)的設(shè)備上,有一個(gè)很經(jīng)常的bug,就是每個(gè)設(shè)備都會(huì)產(chǎn)生相同的ANDROID_ID:9774d56d682e549c
廠商定制系統(tǒng)的Bug:有些設(shè)備返回的值為null。
設(shè)備差異:對(duì)于CDMA設(shè)備,ANDROID_ID和DEVICE_ID是相同的值
使用方法:
//返回一個(gè)字符串
android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
6. Installtion ID : UUID
更多:http://blog.sina.com.cn/s/blog_6489d55b01012q8t.html
以上四種方式存在的一定的局限性或者bug,另外一種方式解決,就是使用UUID,該方法無(wú)需訪問(wèn)設(shè)備的資源,也跟設(shè)備類(lèi)型無(wú)關(guān)。
這是一個(gè)自定義的值:
自定義生成UUID ,可根據(jù)上述的幾種方式,生成UUID,作為唯一標(biāo)志。參考:最后的示例
下面這段話引用這篇文章
在程序第一次安裝運(yùn)行后生成一個(gè)ID(注意:是自己生成,而非系統(tǒng)主動(dòng)生成的!),但該方式跟設(shè)備唯一標(biāo)識(shí)不一樣,它會(huì)因?yàn)椴煌膽?yīng)用程序而產(chǎn)生不同的ID,而不是設(shè)備唯一ID。因此經(jīng)常用來(lái)標(biāo)識(shí)在某個(gè)應(yīng)用中的唯一ID(即Installtion ID),或者跟蹤應(yīng)用的安裝數(shù)量。
“它會(huì)因?yàn)椴煌膽?yīng)用程序而產(chǎn)生不同的ID”,這句是錯(cuò)誤的,因?yàn)槭亲远x的,所以不同的應(yīng)用程序,可能不一樣也可能一樣,甚至相同的應(yīng)用程序,不同的機(jī)型都一樣。UUID完全自定義。
示例:
可以使用 String.hashCode() 加密序列號(hào)
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice, tmSerial, tmPhone, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String uniqueId = deviceUuid.toString();
參考:http://www.cnblogs.com/xiaowenji/archive/2011/01/11/1933087.html
http://www.cnblogs.com/lqminn/p/4204855.html
關(guān)注我的公眾號(hào),輕松了解和學(xué)習(xí)更多技術(shù)
總結(jié)
以上是生活随笔為你收集整理的查看 android 设备号,获取Android设备的唯一识别码|设备号|序号|UUID的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 国际化开发技术FAQ
- 下一篇: linux上下左右为ABCD