问题
在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备的唯一标识。
但Android6.0后google对权限加以限制和国内rom的不同等原因导致无法一个稳定的唯一标示
常见唯一标示
-
imei
-
Android_id
-
mac地址
-
Installtion ID : UUID
-
Pseudo-Unique ID
IMEI
获取权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
获取方法
TelephonyManager telephonyManager =(TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();
问题:
Android6.0后当无法获取到该权限后,方法直接报错,imei作为唯一标示可靠性太差。
Android_id
获取String ANDROID_ID = Settings.System.getString(getContentResolver(), Settings.System.ANDROID_ID);
问题:
Android_id是不需要权限,但它跟手机rom和手机厂商有关(Android_id是设备首次运行随机生成的64位数字)有点手机是获取不到,恢复出厂设置时也会改变,可靠性也较差
Mac地址
获取方法
/**
* Android 6.0 之前(不包括6.0)获取mac地址
* 必须的权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
* @param context * @return
*/
public static String getMacDefault(Context context) {
String mac = "";
if (context == null) {
return mac;
}
WifiManager wifi = (WifiManager)context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = null;
try {
info =