Android获取系统(ROM)类别及版本号

很多时候我们需要知道用户当前使用的是什么系统,甚至是系统的版本号(比如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实现

更多参考资料:https://blog.csdn.net/xx326664162/article/details/52438706

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,530评论 25 709
  • 前言Android Build 系统是 Android 源码的一部分。关于如何获取 Android 源码,请参照 ...
    加菲猫Jack阅读 2,399评论 0 6
  • android.os.Build类中。包括了这样的一些信息。我们可以直接调用 而不需要添加任何的权限和方法。and...
    _九卿_阅读 1,277评论 0 0
  • “你在想什么?” 我说,“我在害怕。” 怕什么呢?怕命运弄人,天不佑我。 高考是一道劫,连着几道雷分时段降下来,第...
    晨晓萧遥阅读 490评论 1 6
  • 冬天说 不要老呆在家里 会得抑郁的 得出来透透气 太阳说 出来走走,暖阳会聚焦你 阴霾不屑地说 以为这是你们的天下...
    澄默时节阅读 288评论 10 14