[Android] 代码获取手机系统类型(小米MIUI、华为EMUI、魅族FLYME)

news/2024/4/16 2:51:50

我们都知道,现在Android系统手机各式各样,包括三星、华为、小米、魅族等等,它们的系统都不是原生的Android系统,都是经过手机厂商修改过的,并且通过刷机可以在不同手机刷各式各样的系统,在一些应用中需要根据不同的系统做不同的处理,因此我们就需要获取手机使用的什么系统,现在主要介绍一下华为、小米、魅族三种系统的获取方法。

原理:在Android系统中有一个类似Windows系统注册表的文件build.prop。这个文件内定义了系统初始(或永久)的一些参数属性、功能的开放等。


下面是某安卓系统的build.prop部分代码:

# begin build properties (开始设置系统性能)
# autogenerated (通过设置形成系统信息)
ro.=GRI40 (版本ID)
ro.build.=GRJ22 (版本号)
ro.build.version.incremental=eng.buildbot.20110619.060228 (版本增量)
ro.build.version.sdk=10 (sdk版本)
ro.build.version.codename=REL (版本代号)
ro.build.version.release=2.3.4 (Android 2.3.4系统)
ro.build.date=Sun Jun 19 06:02:58 UTC 2011 (制作者及制作时间)
ro.build.date.utc=0
ro.build.type=user (编译模式,如user,userdebug,eng,test模式)
ro.build.user=buildbot (编译账户)
ro.build.host=bb1 (编译主机系统)
ro.build.tags=test-keys (编译标签)
ro.product.model=HTC Wildfire (HTC内部手机代号)
ro.product.brand=htc_wwe (手机品牌)
ro.product.name=htc_buzz (手机正式名称)
ro.product.device=buzz (采用的设备)
ro.product.board=buzz (采用的处理器)
ro.product.cpu.abi=armeabi-v6j (cpu的版本)
ro.product.cpu.abi2=armeabi (cpu的品牌)
ro.product.manufacturer=HTC (手机制造商)

其实这些配置参数是以键值对的方式存放,一般情况下厂商定制ROM的时候会在定制的ROM里面加入ROM特有的标识(当然不排除有些ROM在不同版本中使用不同的版本标识),我们可以根据这些ROM标识对常见的ROM进行识别。

关键代码如下:

public class OSUtils {//MIUI标识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";//EMUI标识private static final String KEY_EMUI_VERSION_CODE = "ro.build.version.emui";private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level";private static final String KEY_EMUI_CONFIG_HW_SYS_VERSION = "ro.confg.hw_systemversion";//Flyme标识private static final String KEY_FLYME_ID_FALG_KEY = "ro.build.display.id";private static final String KEY_FLYME_ID_FALG_VALUE_KEYWORD = "Flyme";private static final String KEY_FLYME_ICON_FALG = "persist.sys.use.flyme.icon";private static final String KEY_FLYME_SETUP_FALG = "ro.meizu.setupwizard.flyme";private static final String KEY_FLYME_PUBLISH_FALG = "ro.flyme.published";/*** @param* @return ROM_TYPE ROM类型的枚举* @description获取ROM类型: MIUI_ROM, FLYME_ROM, EMUI_ROM, OTHER_ROM*/public static ROM_TYPE getRomType() {ROM_TYPE rom_type = ROM_TYPE.OTHER;try {BuildProperties buildProperties = BuildProperties.getInstance();if (buildProperties.containsKey(KEY_EMUI_VERSION_CODE) || buildProperties.containsKey(KEY_EMUI_API_LEVEL) || buildProperties.containsKey(KEY_EMUI_CONFIG_HW_SYS_VERSION)) {return ROM_TYPE.EMUI;}if (buildProperties.containsKey(KEY_MIUI_VERSION_CODE) || buildProperties.containsKey(KEY_MIUI_VERSION_NAME) || buildProperties.containsKey(KEY_MIUI_INTERNAL_STORAGE)) {return ROM_TYPE.MIUI;}if (buildProperties.containsKey(KEY_FLYME_ICON_FALG) || buildProperties.containsKey(KEY_FLYME_SETUP_FALG) || buildProperties.containsKey(KEY_FLYME_PUBLISH_FALG)) {return ROM_TYPE.FLYME;}if (buildProperties.containsKey(KEY_FLYME_ID_FALG_KEY)) {String romName = buildProperties.getProperty(KEY_FLYME_ID_FALG_KEY);if (!TextUtils.isEmpty(romName) && romName.contains(KEY_FLYME_ID_FALG_VALUE_KEYWORD)) {return ROM_TYPE.FLYME;}}} catch (IOException e) {e.printStackTrace();}return rom_type;}public enum ROM_TYPE {MIUI,FLYME,EMUI,OTHER}
}

使用方法:
OSUtils.ROM_TYPE romType = = OSUtils.getRomType();

可能您需要对其他的ROM进行区分,那么只需三步:
1、使用BuildProperties获取到所有的key, 遍历获取到所有的value(getProperty),或者直接找到build.prop文件。
2、找到定制ROM特征的标识(key/value)
3、增加ROM_TYPE枚举类型,getRomType方法加入识别比对即可。


转载自:http://www.jianshu.com/p/6e6828755667


http://www.ppmy.cn/news/627155.html

相关文章

UC浏览器的那些坑

之前曾经想过要记录一下,后来觉得太负能就删了。毕竟既然端着这碗饭,用户群体不小的一个浏览器页面显示有问题,兼容嘛不做是不行的。 但是!!但是!!但是!!! …

centos下的Nginx的安装 --yum安装

1.没有可用软件包 nginx 2.检查yum源下nginx相关软件包 3.解决yum源无nginx软件包问题 yum install epel-release yum update更新yum源后查询结果 4.安装nginx yum -y install nginx5.yum安装后的nginx相关目录 6.查看nginx.conf,确定nginx相关具体目录 详细配置…

Day05

目录 1、编写mybatis插件,实现字段自动填充 注意 2、ThreadLocal的简单使用 3、问题:添加员工语句执行成功,但数据库中未添加新员工 4、问题:foreach 1、编写mybatis插件,实现字段自动填充 如何编写插件 Interc…

Arch简介

Arc Linux(或称Arc)是一种以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅、正确和代码最小化的设计宗旨。Arc Linux项目受CRUX启发,由Judd Vinet于2002年启动。 基本简介 ArchLinux是个针对i686优化的linux发行版。最初灵感源于 Per Lidn 开发的一个…

leetcode583. 两个字符串的删除操作(java-动态规划)

两个字符串的删除操作 leetcode583. 两个字符串的删除操作题目描述解题思路解法一 递归加缓存动态规划代码演示 动态规划专题 leetcode583. 两个字符串的删除操作 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/delete-…

Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:1.0 from any of the

今天在写项目的时候突然发现eclipse创建不了web项目了,但是之前写的web项目能用 就很奇怪 然后在网上找解决方法,只找到了在eclipse Maven配置中添加新的Catalog配置: http://repo1.maven.org/maven2/archetype-catalog.xml 但是还是不管用…

什么是Blazor?

Blazor是单页应用程序开发框架。 Blazor名称是Browser和Razor(.NET HTML视图生成引擎)一词的组合/突变。含义是Blazor不必在服务器上执行Razor视图才能将HTML呈现给浏览器,而是能够在客户端上执行这些视图。 Blazor还支持在服务器上执行SPA。…

Razor Templating Engine

最近遇到html模板解析,我完全可以用MS的T4模板或者是StringTemplate等其他的模板来做,但是出于尝试和对Razor语发的感兴趣,便翻了翻Razor模板的资料,其CodePlex主页http://razorengine.codeplex.com/。 下面讲的都是一些其主页上面…

Blade模板引擎

不限制在view中使用PHP原生代码 section 定义一个片段 yield() 占位符 在 *.blade.php 中引用布局文件 extends(layouts) layouts.blade.php 文件中代码 <!DOCTYPE html> <html> <head><title>轻松学会laravel - yield(title)</title> &l…

好玩的横版射击游戏介绍:Broforce武装原型 for mac

为大家推荐一款非常好玩的横版射击游戏&#xff0c;Broforce武装原型 for mac提供了单人模式和合作模式&#xff0c;每一关都有一个恶魔boss&#xff0c;在武装原型破解版中&#xff0c;玩家将操控角色向沿途的敌人发动攻击&#xff0c;也可以使用机关枪消灭敌人&#xff0c;赶…

Alchemy

步骤&#xff1a;1、下载下载之前&#xff0c;说一下这几个软件的关系&#xff0c;便于理解。看图&#xff0c;就是我的理解。Alchemy下载页面&#xff08;点此直接下载文件&#xff09;&#xff1a; http://labs.adobe.com/downloads/alchemy.htmlJava(JRE)下载页面&#xff1…

A. Arena of Greed

链接&#xff1a;https://codeforces.com/problemset/problem/1425/A Lately, Mr. Chanek frequently plays the game Arena of Greed. As the name implies, the games goal is to find the greediest of them all, who will then be crowned king of Compfestnesia. The ga…

Archer

CF上的一道题&#xff0c;就是求赢的概率。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<iomanip> #include<algorithm> #include<cctype> #include<stack> #include<queue> #inc…

blade

Laravel 框架中的 Blade 模板引擎&#xff0c;很好用&#xff0c;但是在官方文档中有关 Blade 的介绍并不详细&#xff0c;有些东西没有写出来&#xff0c;而有些则是没有说清楚。比如&#xff0c;使用中可能会遇到这样的问题&#xff1a; 1.yield 和 section 都可以预定义可替…

Laravel Blade

Laravel默认使用Blade作为模板引擎&#xff0c;Blade中可使用原生PHP代码输出。Blade模板使用.blade.php作为文件扩展名。Blade模板最终都将被“编译”(正则替换)成原生PHP代码并缓存&#xff0c;除非模板文件被修改否则不会重新编译。 模板引擎需要完成最基本三项功能&#xf…

ARCH++

ARCH: Animation-Ready Clothed Human Reconstruction Revisited 可直接用于动画的穿衣服人体重建 我们提出了一种基于图像的三维化身重建方法ARCH&#xff0c;该方法可以重建具有任意服装风格的3D化身。我们重建的化身是动画就绪和高度逼真的&#xff0c;在输入视图的可见区…

Blazor 简介

Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架&#xff1a; 使用 C# 代替 JavaScript 来创建丰富的交互式 UI。共享使用 .NET 编写的服务器端和客户端应用逻辑。将 UI 呈现为 HTML 和 CSS&#xff0c;以支持众多浏览器&#xff0c;其中包括移动浏览器。 使用 .…

chaosblade使用(二十四):blade create jvm

1 介绍 jvm 本身相关场景&#xff0c;以及可以指定类&#xff0c;方法注入延迟、返回值、异常故障场景&#xff0c;也可以编写 groovy 和 java 脚本来实现复杂的场景。目前支持的场景如下 [blade create jvm CodeCacheFilling](blade create jvm CodeCacheFilling.md) 填充 j…

Blazor 开发

1.跳转页面 在视图razor页面头部增加 inject NavigationManager NavigationManager 在OnInitializedAsync()内增加 NavigationManager.NavigateTo("http://baidu.com"); 2.表字段内部增加控件 <TableColumn bind-Field"context.complete_degree"&…

Armitage

一&#xff0c;目录 关于Armitage在我们开始之前...入门如何让任何女人与您交谈用户界面之旅这么多漂亮的屏幕截图主机管理您必须找到它们来破解它们。剥削这是有趣的东西剥削后&#xff0c;这是非常有趣的东西机动性遍及网络并达到更多目标团队Metasploit这是网络攻击管理&am…
最新文章