Android 判断手机厂商rom

有时候需要判断手机系统的ROM,检测ROM是MIUI、EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件查找是否有对应属性来判断是什么ROM。build.prop的介绍可以看Android build.prop简介

  1. 小米

小米官方文档:如何识别小米设备/MIUI系统
判断小米设备
Build.MANUFACTURER是否为Xiaomi
查询build.prop是否有ro.miui.ui.version.name属性
ps:Build.MODEL是机器型号,小米2是MI 2
判断MIUI版本
ro.miui.ui.version.name返回V5表示是MIUI V5系统,V6表示MIUI V6系统

  1. 华为

查询build.prop是否有ro.build.version.emui属性

  1. OPPO

查询build.prop是否有ro.build.version.opporom属性

  1. VIVO

查询build.prop是否有ro.vivo.os.version属性

  1. 锤子

查询build.prop是否有ro.smartisan.version属性

  1. 魅族

Build.DISPLAY是否包含“FLYME”字符串

  1. 360

Build.MANUFACTURER为“QIKU”或“360”

  1. 乐视

待测试。。。

如果官方没有给出用哪个属性判断,就要自己来决定了,一般系统ROM登记都有一个内部版本号,是个不错的选择,例如小米ro.miui.ui.version.code,华为ro.build.hw_emui_api_level

附代码:

public class Rom {

    private static final String TAG = "Rom";

    public static final String ROM_MIUI = "MIUI";
    public static final String ROM_EMUI = "EMUI";
    public static final String ROM_FLYME = "FLYME";
    public static final String ROM_OPPO = "OPPO";
    public static final String ROM_SMARTISAN = "SMARTISAN";
    public static final String ROM_VIVO = "VIVO";
    public static final String ROM_QIKU = "QIKU";

    private static final String KEY_VERSION_MIUI = "ro.miui.ui.version.name";
    private static final String KEY_VERSION_EMUI = "ro.build.version.emui";
    private static final String KEY_VERSION_OPPO = "ro.build.version.opporom";
    private static final String KEY_VERSION_SMARTISAN = "ro.smartisan.version";
    private static final String KEY_VERSION_VIVO = "ro.vivo.os.version";

    private static String sName;
    private static String sVersion;

    public static boolean isEmui() {
        return check(ROM_EMUI);
    }

    public static boolean isMiui() {
        return check(ROM_MIUI);
    }

    public static boolean isVivo() {
        return check(ROM_VIVO);
    }

    public static boolean isOppo() {
        return check(ROM_OPPO);
    }

    public static boolean isFlyme() {
        return check(ROM_FLYME);
    }

    public static boolean is360() {
        return check(ROM_QIKU) || check("360");
    }

    public static boolean isSmartisan() {
        return check(ROM_SMARTISAN);
    }

    public static String getName() {
        if (sName == null) {
            check("");
        }
        return sName;
    }
    
    public static String getVersion() {
        if (sVersion == null) {
            check("");
        }
        return sVersion;
    }

    public static boolean check(String rom) {
        if (sName != null) {
            return sName.equals(rom);
        }

        if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_MIUI))) {
            sName = ROM_MIUI;
        } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_EMUI))) {
            sName = ROM_EMUI;
        } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_OPPO))) {
            sName = ROM_OPPO;
        } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_VIVO))) {
            sName = ROM_VIVO;
        } else if (!TextUtils.isEmpty(sVersion = getProp(KEY_VERSION_SMARTISAN))) {
            sName = ROM_SMARTISAN;
        } else {
            sVersion = Build.DISPLAY;
            if (sVersion.toUpperCase().contains(ROM_FLYME)) {
                sName = ROM_FLYME;
            } else {
                sVersion = Build.UNKNOWN;
                sName = Build.MANUFACTURER.toUpperCase();
            }
        }
        return sName.equals(rom);
    }

    public static String getProp(String name) {
        String line = null;
        BufferedReader input = null;
        try {
            Process p = Runtime.getRuntime().exec("getprop " + name);
            input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
            line = input.readLine();
            input.close();
        } catch (IOException ex) {
            Log.e(TAG, "Unable to read prop " + name, ex);
            return null;
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return line;
    }
}



链接: https://www.jianshu.com/p/ba9347a5a05a
來源:简书


Android ROM是安卓系统的固件或操作系统的软件镜像,ROM是“Read Only Memory”的缩写,意味着它是在手机内存中永久存储的操作系统。Android ROM包含了操作系统的内核和各种应用程序,用于控制和管理手机的硬件和软件。 Android ROM有许多不同的版本,包括官方版本和第三方版本。官方ROM手机制造商开发并预装在新手机上。官方ROM通常经过优化和定制,以适应特定的手机型号和硬件规格。官方ROM通常具有稳定性和兼容性,并且经过手机制造商的授权和认证,因此用户可以获得售后支持和软件更新。 第三方ROM是由个人或开发者社区制作的非官方版本。这些ROM可以提供更多的自定义选项和功能,以满足用户不同的需求和偏好。第三方ROM可以带来更高的性能和更好的电池寿命,也可以允许用户卸载预装应用程序和进行更深层次的系统调整。然而,使用第三方ROM也存在风险,例如失去官方支持和保修,或可能导致设备变砖。 在安装或更改ROM之前,用户应该理解自己的手机型号和硬件规格,并了解所选ROM的兼容性和稳定性。此外,在安装第三方ROM之前,用户还需要了解相关技术知识,以避免不必要的风险和错误。如果用户对ROM操作不熟悉,最好寻求专业人员的帮助。 总的来说,Android ROM是安卓手机的操作系统镜像,提供了各种版本和选择,用户可以根据自己的需求选择安装官方ROM或第三方ROM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值