Android Identifier Analyze - litonghui/TechBlog GitHub Wiki

   Android 开发过程中,开发者迫于产品的淫威,需要实现一些特殊需要,比如获取Android 设备号进去登录校验等等,但同时设备号对用户而言是不愿意暴露的。对于Android 中唯一区别设备信息的有哪些,怎么获得,特别整理一下。

==================

  1,IMEI 唯一标识每台Android设备的序号

   获取方式
   <uses-permission Android:name="android.permission.READ_PHONE_STATE" />
   TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)
   String imei = tm.getDeviceId()
   IMEI 特点
   1,在Android 6.0 对系统权限需要申请,READ_PHONE_STATE 被列为危险权限,如果冒然使用该权限只查询IMEI有点大材小用,用户也不一定授权,所以IMEI会不好获取。
   2,TELEPHONY_SERVICE 对于平板、电视等Android系统设备不一定能获得。
   3,系统bug可能获取不到IMEI信息

  2,ANDROID_ID 设备首次启动系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,如果手机出厂化,会重新生成一个设备号。

   获取方式
   Settings.System.getString(mContext.getContentResolver(), Settings.System.ANDROID_ID
   ANDROID_ID 特点
   1,相比IMEI而言获取的方式和途径相对而言比较容易
   2,由于厂商之间各自的需求,Android_id 获取不一定正确,有可能和IMEI相同,也有可能会有重复的,不能有效区分唯一设备信息。

  3,MAC使用手机Wifi或蓝牙的MAC地址作为设备标识

   获取方式
   WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
   String mac = wifi.getConnectionInfo().getMacAddress();
   MAC 通过wifi或者蓝牙获取需要设备支持wifi和蓝牙,并且保证打开

  4,UUID (Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的形式。

   获取方式
   UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法.

####参考文献:

 1,获取Android设备唯一标识码
 2,Android平台获取手机IMSI等
 3,安卓应用都要获取IMEI