查看 android 设备号,获取Android设备的唯一识别码|设备号|序号|UUID
轉載請標明出處:http://blog.csdn.net/xx326664162/article/details/50511283 文章出自:薛瑄的博客
你也可以查看我的其他同類文章,也會讓你有一定的收貨!
1. DEVICE_ID
假設我們確實需要用到真實設備的標識,可能就需要用到DEVICE_ID。它根據不同的手機設備返回IMEI,MEID或者ESN碼,但它在使用的過程中會遇到很多問題:
1)非手機設備: 如果只帶有Wifi的設備或者音樂播放器沒有通話的硬件功能的話就沒有這個DEVICE_ID
2)權限: 獲取DEVICE_ID需要READ_PHONE_STATE權限,但如果我們只為了獲取它,沒有用到其他的通話功能,那這個權限有點大才小用
3)bug:在少數的一些手機設備上,該實現有漏洞,會返回垃圾,如:zeros(全是0)或者asterisks(星號)的產品
使用方法:
TelephonyManager.getDeviceId()//獲取DEVICE_ID
2. Sim Serial Number
所有的GSM設備 (測試設備都裝載有SIM卡) 可以返回一個TelephonyManager.getSimSerialNumber()
所有的CDMA 設備對于 getSimSerialNumber() 卻返回一個空值!
使用方法:
TelephonyManager.getSimSerialNumber()
3. Serial Number
沒有電話功能的設備被要求必須提供這個序列號。
有電話功能的,我使用的是華為C8817E,也是有這個值的。
Android studio 調試窗口,有一列顯示的就是Serial Number
使用方法:
return android.os.Build.SERIAL
4. MAC ADDRESS
通過手機的Wifi或者藍牙設備獲取MAC ADDRESS作為DEVICE ID,但是并不建議這么做,因為:
硬件限制:并不是所有的設備都有Wifi和藍牙硬件,硬件不存在自然也就得不到這一信息。
獲取的限制:如果Wifi沒有打開過,是無法獲取其Mac地址的;而藍牙是只有在打開的時候才能獲取到其Mac地址。
5. ANDROID_ID
ANDROID_ID是設備第一次啟動時產生和存儲的64bit的一個數,當設備被wipe后會被重置。ANDROID_ID似乎是獲取設備唯一標識的一個好選擇,但它也有缺陷:
它在Android <=2.1 or Android >=2.3的版本是可靠、穩定的,但在2.2的版本并不是100%可靠的
在主流廠商生產的設備上,有一個很經常的bug,就是每個設備都會產生相同的ANDROID_ID:9774d56d682e549c
廠商定制系統的Bug:有些設備返回的值為null。
設備差異:對于CDMA設備,ANDROID_ID和DEVICE_ID是相同的值
使用方法:
//返回一個字符串
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,該方法無需訪問設備的資源,也跟設備類型無關。
這是一個自定義的值:
自定義生成UUID ,可根據上述的幾種方式,生成UUID,作為唯一標志。參考:最后的示例
下面這段話引用這篇文章
在程序第一次安裝運行后生成一個ID(注意:是自己生成,而非系統主動生成的!),但該方式跟設備唯一標識不一樣,它會因為不同的應用程序而產生不同的ID,而不是設備唯一ID。因此經常用來標識在某個應用中的唯一ID(即Installtion ID),或者跟蹤應用的安裝數量。
“它會因為不同的應用程序而產生不同的ID”,這句是錯誤的,因為是自定義的,所以不同的應用程序,可能不一樣也可能一樣,甚至相同的應用程序,不同的機型都一樣。UUID完全自定義。
示例:
可以使用 String.hashCode() 加密序列號
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
關注我的公眾號,輕松了解和學習更多技術
總結
以上是生活随笔為你收集整理的查看 android 设备号,获取Android设备的唯一识别码|设备号|序号|UUID的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国际化开发技术FAQ
- 下一篇: NDK at ...Android\Sd