Android Q以上Build.getSerial()即使加上权限也不能获取到SN,
然后查看源代码,再打印log,看到frameworks/baseservices/core/java/com/android/server/am/ActivityManagerService.java中有直接获取到serial的另一种方法:
IDeviceIdentifiersPolicyService.Stub.asInterface(
ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE))
.getSerial();
所以,在app中使用上述方法即可
记得加入包:
import android.os.IDeviceIdentifiersPolicyService;
import android.os.ServiceManager;
使用如下:
String sn = "";
try {
sn = IDeviceIdentifiersPolicyService.Stub.asInterface(
ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE))
.getSerial();
} catch (Exception e) {
LOG("get sn error ...");
}
LOG("sn: " + sn);
必须使用try{}catch{},否则编译提示需要抛出异常。