很多时候我们需要知道用户当前使用的是什么系统,甚至是系统的版本号(比如MIUI V7、V8)来进一步处理业务逻辑,比如打开系统权限设置界面。

感谢国内各大Android手机/系统生产商,让我们这些Android开发者每天都乐(伤)此(心)不(欲)疲(绝)的解决这些差异化问题。

1. 通过设备制造商判断

通过读取android.os.Build.MANUFACTURER常量来获取设备的制造商从而确定设备所使用的系统。

常用MANUFACTURER常量对应关系

仅供参照:不排除个别厂家有作更改

华为-huawei

魅族-meizu

小米-xiaomi

oppo-oppo

vivo-vivo

三星-samsung

锤子-smartisan

LG-lg

乐视-letv

中兴-zte

酷派-yulong

联想-lenovo

索尼-sony

使用示例:

//为了更好的判断,最好是将两者比较的对象都转换为大写或者小写再进行比较

val mark = Build.MANUFACTURER.toLowerCase()

if (mark.contains("huawei")) {//预防起见使用contains而不使用equals

//这是华为设备

}

总结:此方法通常有效,因为我们通常认为小米的手机使用MIUI系统,华为的手机使用EMUI系统等这种关联关系,那么就可能存在以下情况:

如果使用华为的手机刷小米的系统,这种得到的结果可能不准确。

未知设备制造商X使用未知Y系统,这种可能会导致无法穷觉有多少种情况,但可能我们也不关心这种情况,也许我们只关系国内比较有名气的那几家设备和系统生产商,比如小米、华为等,其它未知情况均可视为原生系统

当然如果还想获取系统的版本号,可能这个方法就有点无力回天了。

2. 通过build.prop的内容判断

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

因此我们可以通过在文件内容中查找一些特征标识从而确定系统类别。

在对build.prop进一步了解的过程中,找到了别人对这一部分的具体使用和讲解,这里就不再过多阐述。

别人的使用讲解

别人封装好的工具类

总结:此方法通常更为有效(取决于特征标识的有效性),但比方法1略复杂一些。但是此方法可能存在一个致命的问题就是可能在某些设备上你无法读取build.prop文件,据网上资料显示(华为mate10 及后续的一些新设备无法读取此文件)。

对于以上两种方法,方式不同,也都存在各自的短板,因此在实际生产环境中最好是根据自己的需求而定,甚至是结合两者方法的特点来实现需求,到目前为止并没有找到其它更为行之有效能够适应所有情况的获取系统类型和版本的方法,如果有,谢天谢地请您告诉我,不胜感激。

附录:

小米开发文档-如何识别小米设备/MIUI系统,关于开发文档中提到的读取属性,应该是使用SystemUtil.java实现

android 判断华为系统版本号,Android获取系统(ROM)类别及版本号相关推荐

  1. android 判断miui版本,Android判断手机是否是小米MIUI系统的方法

    易采站长站为您分析Android判断手机是否是小米MIUI系统的方法的相关资料,需要的朋友可以参考下 废话不多说了,直接给大家贴代码了: 具体代码如下所示: public class MIUIUtil ...

  2. 华为荣耀10长按Android版本,华为荣耀10是什么系统

    作为国内最着名手机厂商之一的华为,于4月19日在上海发布它的中高端强机:华为荣耀10.那么这次的华为荣耀10是什么系统?接下来详细为大家介绍华为荣耀10系统. 华为荣耀10是什么系统? 荣耀10推出A ...

  3. 荣耀7点了android版本,华为荣耀7的手机系统是什么?华为荣耀7能升级安卓5.0吗?...

    华为荣耀7的手机系统是什么 华为荣耀7的手机系统是基于Android 5.0的EMUI 3.1系统. 系统方面,荣耀7同样搭载基于Android 5.0开发的新版本EMUI 3.1系统,而且因为面向年 ...

  4. 荣耀v8 android os,华为荣耀V8的手机系统是什么

    华为荣耀V8的手机系统是什么 华为荣耀V8的手机系统是Android 6.0. 摄像头方面,华为荣耀V8前置800W像素自拍镜头,拥有F2.4光圈,后置两颗平行设计的1200W像素摄像头,一颗黑白一颗 ...

  5. 批处理命令(1):if条件判断;for循环;获取系统时间

    常用命令: 输出字符串1:@echo 直接输出字符串2:rem 延时:TIMEOUT /T 3 获取系统时间:set d=%date:~0,10% set t=%time:~0,8% echo %d% ...

  6. android判断sd u盘,[Android Framework]获取U盘 SD 状态

    Android 4.4 SD 和 U盘 的状态 通过获取StorageVolume 类来判断 是sd还是U盘.我们来看一下这个类 package android.os.storage; import ...

  7. 哪些手机支持android q,华为首批升级Android Q机型曝光 共17款

    中关村在线消息:在5月份的谷歌I/O大会上,谷歌公布了一系列支持下一代安卓系统 Android Q 的机型.除了谷歌自家的 pixel 手机之外,还包括 9 款国产手机,其中华为Mate20 Pro成 ...

  8. java获取系统属性_Java获取系统属性

    1.System类 The System class contains several useful class fields and methods. It cannot be instantiat ...

  9. sap获取系统时间_获取系统当前时间

    NSString *appKey() { // // 获取系统当前时间 // NSDate * date = [NSDate date]; // NSTimeInterval sec = [date ...

最新文章

  1. 计算机视觉的数据增广技术大盘点!附涨点神器,已开源!
  2. python映射类型-python笔记-映射类型(字典)
  3. 深度剖析Kubernetes API Server三部曲 - part 2
  4. python的opencv 车牌识别 开源_毕节进出口车牌识别系统怎么样
  5. 蚂蚁分类信息系统 5.8 信息浏览量后台自定义设置
  6. Linux移植随笔:又遇困难
  7. 一个系统管理员的自白
  8. java 多态利弊 及 父子类转换条件
  9. 操作两个表的SQL语句,可用在数据源中
  10. 17. 合并两个排序的链表(C++版本)
  11. 蒙特卡洛模型之神奇的布丰投针实验
  12. 科学计算机怎么用分号,350ms82ms科学计算器使用方法.docx
  13. NETDMIS5.0对有CAD模型的工件运用“3-2-1”法建立零件坐标2023
  14. Apache POI(Word)教程_编程入门自学教程_菜鸟教程-免费教程分享
  15. 梭哈游戏的发牌5-4
  16. el-dialog对话框重新打开后数据遗留问题
  17. Python实现数据预处理-离散值处理
  18. 暴风影音去除暂停时的广告
  19. 读博士(工作)前要了解的20件事
  20. Python3项目实战:飞机大战

热门文章

  1. 自动驾驶计算系统的多种计算架构---分布式计算架构、中心式计算架构和混合式计算架构
  2. linux-文件授权命令chmod
  3. visual studio 2022 设置C C++ 指针的对齐方式
  4. 在国内外市场均遭遇挫折的OPPO和vivo前景难乐观
  5. 全迹科技推出与iPhone适配的UWB标签授权合作
  6. Could not resolve placeholder 'redis.maxIdle' in string value ${redis.maxIdle}
  7. 解压.gz和.tar.gz文件
  8. APM飞控油门差动调整方向
  9. r如何查询mysql中的数据类型_MySQL数据类型 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. UML图系列之序列图