tha*_*sma 75
这是硬件序列号.要访问它
Android 8及更高版本(> = SDK 26)使用android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE需要危险权限READ_PHONE_STATE.使用READ_PHONE_STATE返回android.os.Build.UNKNOWN.
Android 7.1及更早版本(<= SDK 25)及更早版本android.os.Build.getSerial()确实返回有效的序列号.
它对任何设备都是独一无二的.如果您正在寻找如何获取/使用唯一设备ID的可能性,请阅读此处.
对于涉及反射而无需许可的解决方案,请参阅此答案.
pat*_*ckf 45
在Android 7.1(SDK 25)之前,您将获得:
Build.SERIAL
Run Code Online (Sandbox Code Playgroud)
请注意Android 8(SDK 26)及更高版本,此字段将返回UNKNOWN,必须使用以下命令访问:
Build.getSerial()
Run Code Online (Sandbox Code Playgroud)
这需要危险的许可
android.permission.READ_PHONE_STATE.
请参阅https://developer.android.com/reference/android/os/Build.html#getSerial()
fla*_*yte 17
Build.SERIAL 可以为空,或者有时返回与设备设置中看到的值不同的值(证明1,证明2)。
如果您想要一个更完整,更强大的解决方案,那么我将在一个要点中找到所有可能的解决方案。这是它的简化版本:
public static String getSerialNumber() {
String serialNumber;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
serialNumber = (String) get.invoke(c, "gsm.sn1");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ril.serialnumber");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ro.serialno");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "sys.serialnumber");
if (serialNumber.equals(""))
serialNumber = Build.SERIAL;
// If none of the methods above worked
if (serialNumber.equals(""))
serialNumber = null;
} catch (Exception e) {
e.printStackTrace();
serialNumber = null;
}
return serialNumber;
}
Run Code Online (Sandbox Code Playgroud)
每当我可以在新设备或Android版本上进行测试时,我都会定期更新要点。也欢迎捐款。
| 归档时间: |
|
| 查看次数: |
78419 次 |
| 最近记录: |