1. 程式人生 > >獲取android手機唯一標識

獲取android手機唯一標識

    因為很多軟體都有這個功能,所以說是非常重要的,比如說一個使用者賬號只能繫結3個裝置,那麼得到裝置的唯一標示將是非常重要的。

    我猜那麼你肯定首先想到的就是得到裝置IMEI

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
        String IMEI= telephonyManager.getDeviceId();

通過getDeviceId獲取的為IMEI

MEIDESN   

這種方法我以前也在用,但是用了後你會發現,它其實有很多缺點:

  1. 需要android.permission.READ_PHONE_STATE許可權,有可能被使用者拒絕授權。
  2. 有的手機可能拿不到DeviceId。

其實我們可以自己組建唯一標識,比如說用build類獲取手機的所有配置資訊。

        主機板: Build.BOARD;
        系統啟動程式版本號: Build.BOOTLOADER;
        系統定製商:Build.BRAND;
        cpu指令集:Build.CPU_ABI;
        cpu指令集2:Build.CPU_ABI2;
        設定引數:Build.DEVICE;
        顯示屏引數:Build.DISPLAY;
        無線電韌體版本:Build.getRadioVersion(;
        硬體識別碼:Build.FINGERPRINT;
        硬體名稱:Build.HARDWARE;
        HOST:Build.HOST;
        修訂版本列表:Build.ID;
        硬體製造商:Build.MANUFACTURER;
        版本:Build.MODEL;
        硬體序列號:Build.SERIAL;
        手機制造商:Build.PRODUCT;
        描述Build的標籤:Build.TAGS;
        TIME:Build.TIME;
        builder型別:Build.TYPE;
        USER:Build.USER;

所以我後面寫了這個方法,目前來看能保持唯一性,直接獲取手機所有的資訊並且組成一個新的字串。
 

 public static String getDeviceID() {
        String deviceID= "";
        try{
            //一共13位  如果位數不夠可以繼續新增其他資訊
            m_szDevIDShort= ""+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; 
        }catch (Exception e){
            return "";
        }
        return deviceID;
    }