获取安卓设备唯一ID

获取安卓设备唯一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设备,返回的是一个空值。

猜你喜欢

转载自blog.csdn.net/abc6368765/article/details/88864819