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