4

在不调用 Java 的情况下从 Android O 上的本机获取序列号的正确方法是什么Build.getSerial()

在 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授予了权限。似乎与Build.SERIALAndroid 26 中的弃用有关。

我设法使用 获取此属性adb,因此该值未删除并且存在:

adb shell getprop ro.boot.serialno
4

1 回答 1

0

您可以使用 Build.getSerial() 来获取序列号。

如果用户已授予 READ_PHONE_STATE 权限,则没有问题,但如果用户撤销该权限或从未授予该权限 - 您应该考虑到在尝试检索它时会在运行时收到 SecurityException。

总的来说 - 在过去的几年里,谷歌似乎正在慢慢地阻止应用程序使用个人身份信息(如设备的序列号),所以你应该研究像 installId 这样的替代方案。

于 2019-05-06T16:40:50.790 回答