第一部分讨论了三种标识的来源,我也是通过对着三个标识的判定来区分是模拟器还是真机的。
而在获取设备唯一标识的时候,其实还有其他一些值可供参考,如同imei相近的MEID,ESN,IMSI,以及与设备相关的一些值。
Serial No:
获取方法:
String serialNo =android.os.Build.SERIAL;
或者使用反射
public static String getSerialnum(){
String serialnum =null;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class );
serialnum = (String)(get.invoke(c, "ro.serialno", "unknown" ));
}catch(Exception e){
e.printStackTrace();
}
return serialnum;
}
从android2.3开始加入。同事这个Serial No一般的厂商并不会更改他,保持默认的0123456789ABCDEF。
ANDROID_ID:
获取方法:
String androidId = Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID);
在Android2.2之前的版本可能无效。
因此以上两个值皆不具有普遍性,无法正常使用。
因此我建议使用IMEI和Mac Address的组合来确定一台设备(但是前提是该设备具有电话功能,WIFI功能中的任意一种)
谢谢!