Android获取系统的硬件信息、系统版本以及如何检测ROM类型

时间: 2023-07-09 admin 互联网

Android获取系统的硬件信息、系统版本以及如何检测ROM类型

Android获取系统的硬件信息、系统版本以及如何检测ROM类型

转载请标明出处: 文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货

一、获取手机信息

Android获取手机制作商,系统版本等

获取Android 的Rom信息,以及判断是否为MIUI及获取MIUI版本

在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息。

android.os.Build类中。包括了这样的一些信息。我们可以直接调用 而不需要添加任何的权限和方法。

android.os.Build.BOARD:获取设备基板名称
android.os.Build.BOOTLOADER:获取设备引导程序版本号
android.os.Build.BRAND:获取设备品牌

android.os.Build.CPU_ABI:获取设备指令集名称(CPU的类型)

android.os.Build.CPU_ABI2:获取第二个指令集名称

android.os.Build.DEVICE:获取设备驱动名称
android.os.Build.DISPLAY:获取设备显示的版本包(在系统设置中显示为版本号)和ID一样
android.os.Build.FINGERPRINT:设备的唯一标识。由设备的多个信息拼接合成。

android.os.Build.HARDWARE:设备硬件名称,一般和基板名称一样(BOARD)

android.os.Build.HOST:设备主机地址
android.os.Build.ID:设备版本号。

android.os.Build.MODEL :获取手机的型号 设备名称。

android.os.Build.MANUFACTURER:获取设备制造商

android:os.Build.PRODUCT:整个产品的名称

android:os.Build.RADIO:无线电固件版本号,通常是不可用的 显示unknown
android.os.Build.TAGS:设备标签。如release-keys 或测试的 test-keys

android.os.Build.TIME:时间

android.os.Build.TYPE:设备版本类型 主要为”user” 或”eng”.

android.os.Build.USER:设备用户名 基本上都为android-build

android.os.Build.VERSION.RELEASE:获取系统版本字符串。如4.1.2 或2.2 或2.3等

android.os.Build.VERSION.CODENAME:设备当前的系统开发代号,一般使用REL代替
android.os.Build.VERSION.INCREMENTAL:系统源代码控制值,一个数字或者git hash值

android.os.Build.VERSION.SDK:系统的API级别 一般使用下面大的SDK_INT 来查看

android.os.Build.VERSION.SDK_INT:系统的API级别 数字表示

android.os.Build.VERSION_CODES类 中有所有的已公布的Android版本号。全部是Int常亮。可用于与SDK_INT进行比较来判断当前的系统版本

示例代码:

//BOARD 主板
String phoneInfo = "BOARD: " + android.os.Build.BOARD;
phoneInfo += ", BOOTLOADER: " + android.os.Build.BOOTLOADER;
//BRAND 运营商
phoneInfo += ", BRAND: " + android.os.Build.BRAND;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", CPU_ABI2: " + android.os.Build.CPU_ABI2;//DEVICE 驱动
phoneInfo += ", DEVICE: " + android.os.Build.DEVICE;
//DISPLAY Rom的名字 例如 Flyme 1.1.2(魅族rom)  JWR66V(Android nexus系列原生4.3rom)
phoneInfo += ", DISPLAY: " + android.os.Build.DISPLAY;
//指纹
phoneInfo += ", FINGERPRINT: " + android.os.Build.FINGERPRINT;
//HARDWARE 硬件
phoneInfo += ", HARDWARE: " + android.os.Build.HARDWARE;
phoneInfo += ", HOST: " + android.os.Build.HOST;
phoneInfo += ", ID: " + android.os.Build.ID;
//MANUFACTURER 生产厂家
phoneInfo += ", MANUFACTURER: " + android.os.Build.MANUFACTURER;
//MODEL 机型
phoneInfo += ", MODEL: " + android.os.Build.MODEL;
phoneInfo += ", PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", RADIO: " + android.os.Build.RADIO;
phoneInfo += ", RADITAGSO: " + android.os.Build.TAGS;
phoneInfo += ", TIME: " + android.os.Build.TIME;
phoneInfo += ", TYPE: " + android.os.Build.TYPE;
phoneInfo += ", USER: " + android.os.Build.USER;
//VERSION.RELEASE 固件版本
phoneInfo += ", VERSION.RELEASE: " + android.os.Build.VERSION.RELEASE;
phoneInfo += ", VERSION.CODENAME: " + android.os.Build.VERSION.CODENAME;
//VERSION.INCREMENTAL 基带版本
phoneInfo += ", VERSION.INCREMENTAL: " + android.os.Build.VERSION.INCREMENTAL;
//VERSION.SDK SDK版本
phoneInfo += ", VERSION.SDK: " + android.os.Build.VERSION.SDK;
phoneInfo += ", VERSION.SDK_INT: " + Android.os.Build.VERSION.SDK_INT;

二、检测ROM类型

在开发过程中,可能需要判断系统的ROM信息,检测ROM类型是MIUI、EMUI、还是Flyme。但是又不能只根据手机的生产厂家(android.os.Build.MANUFACTURER)来判断,因为要考虑到刷机的用户。比如说华为手机刷了MIUI系统。

2.1、根据系统基本配置文件build.prop检测ROM类型

[Android]判断是否是华为EMUI系统
有没有API 判断Android 系统是MIUI 的,魅族的Flyme ,还是原生的?
如何识别小米设备/MIUI系统

检测ROM类型是MIUI、EMUI、还是Flyme

  • MIUI 的系统属性字段为 ro.miui.ui.version.code 和 ro.miui.ui.version.name
  • 根据系统基本配置文件build.prop获取华为的ROM等级,知道了等级就知道是否是华为的ROM了。
// 检测MIUI
import java.io.IOException;public final class MIUIUtils {private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";public static boolean isMIUI() {try {//BuildProperties 是一个工具类,下面会给出代码final BuildProperties prop = BuildProperties.newInstance();return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;} catch (final IOException e) {return false;}}
}//检测EMUI
public final class EMUIUtils {private static final String KEY_EMUI_VERSION_CODE = "ro.build.hw_emui_api_level";public static boolean isEMUI() {try {//BuildProperties 是一个工具类,下面会给出代码final BuildProperties prop = BuildProperties.newInstance();return prop.getProperty(KEY_EMUI_VERSION_CODE, null) != null;} catch (final IOException e) {return false;}}
}// 检测Flyme
import android.os.Build;import java.lang.reflect.Method;public final class FlymeUtils {public static boolean isFlyme() {try {// Invoke Build.hasSmartBar()final Method method = Build.class.getMethod("hasSmartBar");return method != null;} catch (final Exception e) {return false;}}}//引用到的工具类
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;public class BuildProperties {private final Properties properties;private BuildProperties() throws IOException {properties = new Properties();properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));}public boolean containsKey(final Object key) {return properties.containsKey(key);}public boolean containsValue(final Object value) {return properties.containsValue(value);}public Set<Entry<Object, Object>> entrySet() {return properties.entrySet();}public String getProperty(final String name) {return properties.getProperty(name);}public String getProperty(final String name, final String defaultValue) {return properties.getProperty(name, defaultValue);}public boolean isEmpty() {return properties.isEmpty();}public Enumeration<Object> keys() {return properties.keys();}public Set<Object> keySet() {return properties.keySet();}public int size() {return properties.size();}public Collection<Object> values() {return properties.values();}public static BuildProperties newInstance() throws IOException {return new BuildProperties();}}

2.2、代码中执行Android shell命令,检测ROM类型

怎么用代码判断Android手机的Rom是MIUI及获取MIUI版本

在Android shell模式下输入 getprop 就能获取系统属性值

如果Rom是MIUI那么就会有以下字段.
[ro.miui.ui.version.code]: [3]
[ro.miui.ui.version.name]: [V5]

那么只要用一下代码获取就能知道是不是UI了.

getSystemProperty("ro.miui.ui.version.name")

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){Log.e(TAG, "Unable to read sysprop " + propName, ex);return null;}finally{if(input != null){try{input.close();}catch (IOException e){Log.e(TAG, "Exception while closing InputStream", e);}}}return line;
}

第二种和第三种方法,理论上可以判断各种ROM的类型,主要就是字段要选择正确,比如MIUI,小米官方有给出,若官方没有给出,就只能自己判断哪个字段可以担此大任。一般系统ROM等级都有一个内部版本号,就是不错的选择。例如:小米ro.miui.ui.version.code,华为ro.build.hw_emui_api_level

其它参考:

Android手机获取系统rom的定制商

关注我的公众号,轻松了解和学习更多技术