android :獲取設備唯一標識碼

按照正常的獲取在Android 8.0 之前都是可以拿到我們的Imei碼的,就是廣爲流傳的那些形式,我就意義贅述了,到了Android 9.0 之後就出現了部分手機廠商的機型獲取不到我們的IMEI碼,例如 '‘一加’'等廠商,而且其他廠商的在獲取的時候也需要獲取我們的

READ_PHONE_STATE權限

不過也能在大部分的手機上通用;也不算太大的缺點,但是到了我們的Android 10 開始,谷歌官方對我們的獲取Imei進行了更加嚴格的限制,基本上無法拿到,我們的APP有需要做單點登錄,需要設備唯一的標識,只能另尋他法;

網絡上其實有很多其他的方法包括,使用ANDROID_ID,使用UUID+其他 保存在sd卡,以及MAC的方法,我就是使用的最後一種,廢話不多說,上代碼

//獲得獨一無二的Psuedo ID
    public static String getUniquePsuedoID() {
        String serial = null;

        String m_szDevIDShort = "35" +
                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; //13 位

        try {
            serial = Build.class.getField("SERIAL").get(null).toString();
            //API>=9 使用serial號
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一個初始化
            serial = "serial"; // 隨便一個初始化
        }
        //使用硬件信息拼湊出來的15位號碼
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

,然後在需要的地方直接調用此方法,就可以拿到一個唯一碼了;

後記

前一段時間,谷歌官方發佈了Android R 也就是11,裏面更新了很多東西,其中對於MAC的獲取也做出了更嚴格的限制,不過目前還沒到beta,MAC也還能使用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章