获取安卓设备唯一ID:https://blog.csdn.net/jiangtea/article/details/72889018
android获取设备唯一ID(优化方案):https://www.jianshu.com/p/76e4b213307b
友盟统计:https://developer.umeng.com/docs/66632/detail/101848
友盟统计UMID潜在的一个坑:https://blog.csdn.net/codezjx/article/details/51823694
1、IMEI
Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且唯一性良好。它根据不同的手机设备返回IMEI,MEID或者ESN码。
缺陷:
非手机设备: 如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID;
权限: 需要READ_PHONE_STATE权限;
在少数的一些手机设备上,该实现有漏洞,会返回垃圾,如:zeros或者asterisks的产品; 模拟器上可以刷IMEI。
获取方式:
public static String getIMEI(Context context) {
String imei;
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
imei = telephonyManager.getDeviceId();
} catch (Exception e) {
imei = "";
}
return imei;
}
2、MAC
可以使用手机Wifi或蓝牙的MAC地址作为设备标识。
缺陷:
硬件限制:并不是所有的设备都有Wifi和蓝牙硬件,硬件不存在自然也就得不到这一信息。
通过WiFi获取:
权限: 需要ACCESS_WIFI_STATE权限
获取到的,不是一个真实的地址,而且这个地址能轻易地被伪造。WLAN不必打开,就可读取些值。
获取方式:
public static String getMac (Context context) {
//wifi mac地址
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String wifiMac = info.getMacAddress();
if(!isEmpty(wifiMac)){
}
return wifiMac;
}
通过蓝牙获取:
权限:需要android.permission.BLUETOOTH权限
BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_szBTMAC = m_BluetoothAdapter.getAddress();
3、SIM ID
SIMID是手机SIM卡的唯一标识,装有SIM卡的Android 2.3设备,可以通过下面的方法获取到Sim Serial Number,对于CDMA设备,返回的是一个空值。