Android 8.0获取设备序列号解决方案

Android8.0以下通常使用反射的方式读取SN号码

Class<?> c = Class.forName("android.os.SystemProperties");

Method get = c.getMethod("get", String.class);

String serial = (String) get.invoke(c, "ro.serialno");

Android升级到8.0之后再用此方法会一直报 Access denied finding property "ro.serialno"这个错,原因是android O为了更好的管理用户的隐私做了一些调整,比如说刚才的那个问题。并且说在Android的未来版本中,针对Android O的应用会将Build.SERIAL视为“设备序列号”,用Build.SERIAL获取了。小编在这里写了一个4.0-8.0+的设备的获取序列号的适配方法。

/**

    * 获取手机序列号

    *

    * @return 手机序列号

    */

    @SuppressLint({"NewApi", "MissingPermission"})

    public static String getSerialNumber() {

        String serial = "";

        try {

            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+

                serial = Build.SERIAL;

            } else {//8.0-

                Class<?> c = Class.forName("android.os.SystemProperties");

                Method get = c.getMethod("get", String.class);

                serial = (String) get.invoke(c, "ro.serialno");

            }

        } catch (Exception e) {

            e.printStackTrace();

            LogUtils.e("e", "读取设备序列号异常:" + e.toString());

        }

        return serial;

    }

csdn可以参考Android8.0以下通常使用反射的方式读取SN号码

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容