获取android手机唯一标识

    因为很多软件都有这个功能,所以说是非常重要的,比如说一个用户账号只能绑定3个设备,那么得到设备的唯一标示将是非常重要的。

    我猜那么你肯定首先想到的就是得到设备IMEI

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

通过getDeviceId获取的为IMEIMEIDESN   

这种方法我以前也在用,但是用了后你会发现,它其实有很多缺点:

  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;
    }

 

你可能感兴趣的:(android)