转载请标明出处: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了。
// 检测MIUIimport 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;        }    }}//检测EMUIpublic 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;        }    }}// 检测Flymeimport 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的定制商

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

更多相关文章

  1. Android(安卓)如何获取所有的wifi连接历史记录?
  2. Android(安卓)VCard通讯录导入导出详解
  3. Android的ADB工具使用
  4. Android音频系统之USB设备通路(Android(安卓)5.1)
  5. Android获取外置SD卡读写路径
  6. Android(安卓)adb shell 命
  7. Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码
  8. 如何唯一的标识一台Android设备?
  9. Android(安卓)Service创建USB HOST通信

随机推荐

  1. Android字体大小设置自适应屏幕分辨率
  2. Android——FragmentPagerAdapter中fragm
  3. Android中实现可滑动的Tab的3种方式
  4. Android本地实现搜索历史记录
  5. Ubuntu 16.04 编译全志6.0Android源码
  6. Android(安卓)——游戏开发之文字冒险游
  7. WebView的使用(基本篇)
  8. flutter使用C代码库----android篇
  9. Android内存泄漏的八种可能(上)
  10. Android过滤特殊字符和emoji表情