Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android設備標識-沒有完美的解決方案-只有取捨

Android設備標識-沒有完美的解決方案-只有取捨

編輯:關於Android編程

 

1. 幾種常用的設備標識碼

IMEI,Sim卡序列號,Wifi模塊Mac地址,Android_ID

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();
String simNo = telephonyManager.getSimSerialNumber();
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
String wifiAddress = wm.getConnectionInfo().getMacAddress();
String androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
IMEI是可以用軟件直接改寫的,重復是無法避免的,標准是15位數字,有些設備上,連這個標准都保證不了。IMEI與每台手機對應,PAD沒有IMEI。此外,小米2上發現,如果不信任一個APP,那麼這個APP將讀取不到IMEI,即讀到的結果是null。IMEI是有多麼的不靠譜。
PAD沒有Sim卡,自然也沒有Sim卡序列號,雙卡的手機還會有兩個Sim卡序列號。PAD也麻煩的,沒有IMEI,沒有SIM卡序列號。
某些手機或者設備沒有Wifi模塊,Mac地址讀取不到。一個移動設備都有wifi,這個應該都會有,不過也是不能保證不重復。
Android_ID在每次恢復工廠模式後,都會重新生成,另外個別手機存在bug,產生的Android_ID都是一樣的。與其交給系統產生id,還不如自己產生id。

 

2. 常用標識的組合

 

    1. 如果IMEI不為空,返回IMEI,否則,進入2
    2. 如果Sim卡序列號不為空,返回序列號,否則,進入3
    3. 如果MAC地址不為空,md5(mac+mac_address),否則進入4
    4. 如果Android_ID不為空,返回Android_ID,否則進入5
    5. 返回invalid_imei

 

如果是統計APP的安裝量一般用上面這些方法就可以了。這樣統計到的設備數量只會更少,不會更多。

3. 如果要實現設備管理這樣的功能怎麼辦

這就要求保證每個設備的標識不能重復,因此使用上面的方法就不行了。使用UUID來處理,並且持久化到SharedPreference和SD卡,這樣只要APP和文件沒有同時被干掉,就不會重新生成新的標識。

設備id生成

1. 如果imei不為空,並且長度等於15,那麼deviceid = android-imei-uuid-timestamp。否則進入2。
2. deviceid = android-uuid-timestamp

設備id讀取

1. 如果從sharedpreference中,讀到deviceid,將該id存儲到sd卡上,返回改id,否則進入2
2. 如果sd卡中,讀到deviceid,那麼將該id存儲到sharedpreference,返回該id,否則進入3
3. 生成deviceid,存儲到sd卡和sharedpreference中

4. 參考文章

http://android-developers.blogspot.com/2011/03/identifying-app-installations.html


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved