Build.GetSerial() 在 API 29 上返回未知

Dmi*_*iev 8 android xamarin android-10.0

我无法在 android 10 设备上获得串行。

我从这里了解所有内容(权限,运行时权限,只有在授予权限后才能获得序列号) android Build.GetSerial() throwing exception

我的代码适用于所有 android 版本,除了 10

你有什么想法?

Mat*_*Pag 15

如果您按照此处的官方文档进行操作:https : //developer.android.com/reference/android/os/Build.html#getSerial(),有关 Android 10 更改的更多信息请点击此处

您会注意到,从 Android 10 开始,此方法返回Build.UNKNOWN。您不能再使用它来唯一标识单个设备

您需要切换到名为Settings.Secure.ANDROID_ID的“较少”持久版本

绕过此限制的唯一方法是:

  1. 创建一个系统应用能够获得READ_PRIVILEGED_PHONE_STATE系统权限(普通应用无法获得这个)。
  2. 注册为运营商(这需要您已经构建了Android ROM)
  3. 有一个自定义的“工作配置文件”来在设备中设置您自己的策略。

可以想象,所有这些选项并不意味着标准的 android 应用程序开发人员会使用

  • 问题在于 READ_PRIVILEGED_PHONE_STATE 是系统权限。只有系统中预装的应用程序才能获取该权限,因此如果您使用的是非 root 设备,则第三方应用程序无法获取该权限。 (2认同)