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

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

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52438706 文章出自:薛瑄的博客

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

一、获取手机信息

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> 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 keys() {

return properties.keys();

}

public Set keySet() {

return properties.keySet();

}

public int size() {

return properties.size();

}

public Collection 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的定制商

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

相关数据

如何在腾讯微云中设置独立密码
365网络科技

如何在腾讯微云中设置独立密码

⌛ 07-16 👁️ 3083
基本字义解释
365beat版app

基本字义解释

⌛ 07-12 👁️ 2404