如何动态获取Android系统属性

Android设备有很多系统属性,比如说Android版本号,比如品牌,型号,比如厂商操作系统的版本号等,我们经常会要用到这些属性,那怎么获取呢?

最简单的办法,就是连接USB调试后,在命令行输入 adb shell getprop xxx查看结果,其中xxx是系统属性名称。当然我们首先得知道这个属性名称才行。
但是如果我们不只是要看到结果,还要在代码里动态获取并且使用,该怎么办呢?可以用如下几个办法:

一、android.os.Build这个类里有很多静态属性,如下属性我们可以直接用Build.XXX来得到:

Build.BOARD // 主板
Build.BRAND // 系统定制商
Build.SUPPORTED_ABIS //CPU指令集
Build.DEVICE // 设备参数
Build.DISPLAY // 显示屏参数
Build.FINGDERPRINT // 唯一编号
Build.SERIAL // 硬件序列号
Build.ID // 修订版本列表
Build.MANUFACTURER // 硬件制造商
Build.MODEL //版本
Build.HARDWARE //硬件名
Build.PRODUCT //手机产品名
Build.TAGS // 描述build的标签
Build.TYPE // Builder类型
Build.VERSION.CODENAME //当前开发代号
Build.VERSION.INCREMENTAL //源码控制版本号
Build.VERSION.RELEASE //版本字符串
Build.VERSION.SDK_INT //Android版本号
Build.HOST // HOST值
Build.USER // User名
Build.TIME // 编译时间

比如我们想获取Android版本号,可以直接调用Build.VERSION.SDK_INT来获取。

二、另外还有些属性可以通过System.getProperty(“xxx”)来获取:

os.version // OS版本号
os.name // OS名称
os.arch // OS架构
user.home //home属性
user.name // name属性
user.dir //dir属性
user.timezone //时区
path.separator //路径分隔符
line.separator // 行文分隔符
file.separator //文件分隔符
Java.vendor.url // Java vender URL属性
java.class.path // Java Class路径
java.class.version // Java class版本
java.vendor // java vender 属性
java.version // Java 版本
java.home // Java Home 属性

比如System.getProperty(“os.name”)得到的结果为“Linux”。

三、获取厂商特有属性

比如我们想获取华为手机的EMUI版本号,获取小米手机的MIUI版本号,可以通过如下方式:
方法1:

public static String getSystemProperty(String propName) {
    String line;
    BufferedReader input = null;
    try {
        Process p = Runtime.getRuntime().exec("getprop " + propName);
        input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
        line = input.readLine();
        input.close();
    } catch (IOException ex) {
        return null;
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return line;
}

比如获取miui版本号,miui版本号的属性名称为“ro.miui.ui.version.code”,所以通过getSystemProperty(“ro.miui.ui.version.code”)就可以得到,结果例如。

方法2:通过反射的方法获取

    public static String getProp(String propName) {
        Class<?> classType = null;
        String buildVersion = null;
        try {
            classType = Class.forName("android.os.SystemProperties");
            Method getMethod = classType.getDeclaredMethod("get", new Class<?>[]{String.class});
            buildVersion = (String) getMethod.invoke(classType, new Object[]{propName});
        } catch (Exception e) {
            e.printStackTrace();
        }
        return buildVersion;
    }

华为的EMUI的版本号属性名称为”ro.build.version.emui”,因此调用getProp(“ro.build.version.emui”)就可以显示EMUI版本号,结果例如“EmotionUI_4.1”。

以上内容参考自:
https://www.jianshu.com/p/dacf0faf1033
https://blog.csdn.net/devilkin64/article/details/19415717
https://www.cnblogs.com/yjing/p/6654019.html

猜你喜欢

转载自blog.csdn.net/fenggering/article/details/81120855