1.小结:
1.Android 9及以上无法获取sn,Android 9以下不需要权限即可获取
2.获取到的参数相对稳定不变
3.不同手机参数长度可能不同
补充:新增获取方法:Build.getSerial()
1.可以获取到多数Android 9及以上手机sn
2.sn获取值与实际值可能不符(少数)
3.使用此方法有局限性,SDK编译版本26起步:compileSdkVersion 26
2.获取参数的代码:
/**
* 获取SN
* @return
*/
public static String getSN() {
String serial = "";
//通过android.os获取sn号
try {
serial = android.os.Build.SERIAL;
if (!serial.equals("")&&!serial.equals("unknown"))return serial;
}catch (Exception e){
serial="";
}
//通过反射获取sn号
try {
Class<?> c =Class.forName("android.os.SystemProperties");
Method get =c.getMethod("get", String.class);
serial = (String)get.invoke(c, "ro.serialno");
if (!serial.equals("")&&!serial.equals("unknown"))return serial;
//9.0及以上无法获取到sn,此方法为补充,能够获取到多数高版本手机 sn
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) serial = Build.getSerial();
} catch (Exception e) {
serial="";
}
return serial;
}
3.测试,不同手机的获取结果:
注:这里的权限☞
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
华为Android7.0:
无论是否有权限:
sn获取:XPUDU173230257** 参数稳定
sn获取:XPUDU173230257**
vivo Android7.1:
无论是否有权限:
sn获取:BIEQ9TEYOFUOO7** 参数稳定
sn获取:BIEQ9TEYOFUOO7**
酷派 Android7.1:
无论是否有权限:
sn获取:1dabb4** 参数稳定
sn获取:1dabb4**
华为Android8.0:
无论是否有权限:
sn获取:SNMBB183055041** 参数稳定
sn获取:SNMBB183055041**
华为Android8.0:
无论是否有权限:
sn获取:68U5T184030156** 参数稳定
sn获取:68U5T184030156**
vivo 8.1
无论是否有权限,均获取不到
无论是否有权限:
sn获取:KZ9DBQKBVGCIYH** 参数稳定
sn获取:KZ9DBQKBVGCIYH**
oppo 9.0
无论是否有权限,均获取不到
sn:unknown
vivo 9.0
无论是否有权限,均获取不到
sn:unknown
三星 9.0
无论是否有权限,均获取不到
sn:unknown
华为Android10
无论是否有权限,均获取不到
sn:unknown
华为Android10
无论是否有权限,均获取不到
sn:unknown
4.尝试获取Android 9及以上版本的 sn
//此方法局限性: SDK编译版本26起步: compileSdkVersion 26
serial = Build.getSerial();
Log.e(TAG, "sn:"+getSN());
OPPO 9.0
无权限时:sn:
有权限时:sn:RK55JFEQ4LM74T**
vivo 9.0
无权限时:sn:
有权限时:sn:42858e**
三星 9.0
无权限时:sn:
有权限时:sn:483fce** (与实际值不符,但唯一)
华为Android10
无权限时:sn:
有权限时:sn:8UJ4C19B270175**
华为Android10
无权限时:sn:
有权限时:sn:unknown
网友评论