如何获取设备serialno而不在Android O中询问运行时权限READ_PHONE_STATE

时间:2017-12-05 16:28:15

标签: java android permissions java-native-interface android-8.0-oreo

我正在尝试在Android O上获取该设备的序列号,我环顾四周并发现:

 1. Build.SERIAL is deprecated so we have to use Build.getSerial();
 2. ro.serialno is no more accessible: "Access denied finding property "ro.serialno""

关于第一种方法,我的问题是它需要READ_PHONE_STATE,并且必须在运行时询问。我需要一种方法来做到这一点,而不影响用户体验任何想法如何做到这一点?

有可能吗?

1 个答案:

答案 0 :(得分:0)

该值已弃用,未隐藏;甚至是这个,仅适用于targetSdkVersion 26及更高版本的应用。这意味着如果你定位Android N,你仍然可以在没有运行时权限的情况下使用它。此外,如果你使用targetSdkVersion 23或更少,你可以在没有弹出窗口的情况下请求READ_PHONE_STATE权限。然后,当应用程序升级到目标Oreo时,系统将已获得授予此app_id的权限。

这就是说,我必须承认,在我们被迫将targetSdkVersion推送到24之前,我们一直担心运行时权限弹出窗口,但我们的担忧被证明是毫无根据的。我们的使用模式没有发生重大变化。

最后,我还建议不要依赖Build.SERIAL。作为远程指纹,adid已足够;在指纹必须在udid重置后仍然存活的情况下,Build.SERIAL确实可以为root设备或破解的APK提供保护。