在不调用Java Build.getSerial()
的情况下,从Android O上获取本机序列号的正确方法是什么。
在Android上<来自本机的26个版本我们可以使用以下代码获取设备序列号:
string serial = read_property("ro.boot.serialno");
...
string read_property(const string& property_name) {
char propertyValue[PROP_VALUE_MAX];
int propertyLen = __system_property_get(property_name.c_str(), propertyValue);
...
}
在Android O上,这会引发错误:
Access denied finding property "ro.boot.serialno"
虽然授予了READ_PHONE_STATE
权限。似乎与Android 26中已弃用的Build.SERIAL
相关。
我设法使用adb
获取此属性,因此该值不会被移除并且存在:
adb shell getprop ro.boot.serialno
答案 0 :(得分:0)
您可以使用Build.getSerial()获取序列号。
如果用户已授予READ_PHONE_STATE权限,则没有问题,但是如果用户已撤消该权限或从未授予该权限,则应考虑到在尝试检索它时将在运行时获得SecurityException。
总体而言-过去几年来,Google似乎在努力阻止应用程序使用个人身份信息(例如设备的序列号),因此您应该考虑安装ID之类的替代方法。