Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目录

目录
判断小米华为系统
工具类:获取系统信息
QMUI库中提供的方法

判断小米华为系统

工具类:获取系统信息

public class SimpleDeviceUtils {public enum SystemType {/*** 小米手机(MIUI系统)*/SYS_MIUI,/*** 华为手机(EMUI系统)*/SYS_EMUI,/*** 魅族手机,FLYME系统*/SYS_FLYME,/*** 其他系统*/SYS_OTHER}private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level";private static final String KEY_EMUI_VERSION = "ro.build.version.emui";private static final String KEY_EMUI_CONFIG_HW_SYS_VERSION = "ro.confg.hw_systemversion";/*** 8.0之后有些系统信息获取不到,没有在各种版本手机上逐一测试*/public static SystemType getSystemType() {try {Properties prop = new Properties();prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));if (Build.MANUFACTURER.toLowerCase().equals("xiaomi")//官方提供的判断是否为小米手机(而非MIUI系统)的方法|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null//QMUI提供的判断是否是MIUI的方法|| prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null//下面两个是网上补充的方法,感觉没必要的|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null) {return SystemType.SYS_MIUI;} else if (isEMUI()//华为|| prop.getProperty(KEY_EMUI_API_LEVEL, null) != null|| prop.getProperty(KEY_EMUI_VERSION, null) != null|| prop.getProperty(KEY_EMUI_CONFIG_HW_SYS_VERSION, null) != null) {return SystemType.SYS_EMUI;} else if (isMeizu()//魅族推送SDK中提供的判断是否是魅族的方法|| DeviceHelper.isMeizu()) {//QMUI提供的判断是否是魅族的方法return SystemType.SYS_FLYME;}} catch (IOException e) {e.printStackTrace();}return SystemType.SYS_OTHER;}@SuppressLint("PrivateApi")private static boolean isEMUI() {Class<?>[] clsArray = new Class<?>[]{String.class};Object[] objArray = new Object[]{"ro.build.version.emui"};try {Class<?> SystemPropertiesClass = Class.forName("android.os.SystemProperties");Method get = SystemPropertiesClass.getDeclaredMethod("get", clsArray);String version = (String) get.invoke(SystemPropertiesClass, objArray);Log.i("bqt", "EMUI version is:" + version);return !TextUtils.isEmpty(version);} catch (Exception e) {e.printStackTrace();}return false;}/*** 判断是否为魅族设备*/private static boolean isMeizu() {String model = SystemProperties.get("ro.meizu.product.model");return (!TextUtils.isEmpty(model)) || "meizu".equalsIgnoreCase(Build.BRAND) || "22c4185e".equalsIgnoreCase(Build.BRAND);}
}

QMUI库中提供的方法

//判断系统厂商,里面的内容基本都来自QMUI库
public class DeviceHelper {private final static String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";private static final String KEY_FLYME_VERSION_NAME = "ro.build.display.id";private final static String FLYME = "flyme";private final static String MEIZUBOARD[] = {"m9", "M9", "mx", "MX"};private static String sMiuiVersionName;private static String sFlymeVersionName;static {Properties properties = new Properties();if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {// android 8.0,读取 /system/build.prop 会报 permission deniedFileInputStream fileInputStream = null;try {fileInputStream = new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"));properties.load(fileInputStream);} catch (Exception e) {e.printStackTrace();} finally {if (fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}}try {Class<?> clzSystemProperties = Class.forName("android.os.SystemProperties");Method getMethod = clzSystemProperties.getDeclaredMethod("get", String.class);sMiuiVersionName = getLowerCaseName(properties, getMethod, KEY_MIUI_VERSION_NAME);sFlymeVersionName = getLowerCaseName(properties, getMethod, KEY_FLYME_VERSION_NAME);} catch (Exception e) {e.printStackTrace();}}private static String getLowerCaseName(Properties p, Method get, String key) {String name = p.getProperty(key);if (name == null) {try {name = (String) get.invoke(null, key);} catch (Exception e) {e.printStackTrace();}}if (name != null) name = name.toLowerCase();return name;}private static boolean sIsTabletChecked = false;private static boolean sIsTabletValue = false;/*** 判断是否为平板设备*/public static boolean isTablet(Context context) {if (sIsTabletChecked) {return sIsTabletValue;} else {sIsTabletChecked = true;sIsTabletValue = (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >=Configuration.SCREENLAYOUT_SIZE_LARGE;return sIsTabletValue;}}/*** 判断是否是flyme系统*/public static boolean isFlyme() {return !TextUtils.isEmpty(sFlymeVersionName) && sFlymeVersionName.contains(FLYME);}/*** 判断是否是MIUI系统*/public static boolean isMIUI() {return !TextUtils.isEmpty(sMiuiVersionName);}public static boolean isMIUIV5() {return "v5".equals(sMiuiVersionName);}public static boolean isMIUIV6() {return "v6".equals(sMiuiVersionName);}public static boolean isMIUIV7() {return "v7".equals(sMiuiVersionName);}public static boolean isMIUIV8() {return "v8".equals(sMiuiVersionName);}public static boolean isMIUIV9() {return "v9".equals(sMiuiVersionName);}public static boolean isFlymeVersionHigher5_2_4() {//查不到默认高于5.2.4boolean isHigher = true;if (sFlymeVersionName != null && !sFlymeVersionName.equals("")) {Pattern pattern = Pattern.compile("(\\d+\\.){2}\\d");Matcher matcher = pattern.matcher(sFlymeVersionName);if (matcher.find()) {String versionString = matcher.group();if (versionString != null && !versionString.equals("")) {String[] version = versionString.split("\\.");if (version.length == 3) {if (Integer.valueOf(version[0]) < 5) {isHigher = false;} else if (Integer.valueOf(version[0]) > 5) {isHigher = true;} else {if (Integer.valueOf(version[1]) < 2) {isHigher = false;} else if (Integer.valueOf(version[1]) > 2) {isHigher = true;} else {if (Integer.valueOf(version[2]) < 4) {isHigher = false;} else if (Integer.valueOf(version[2]) >= 5) {isHigher = true;}}}}}}}return isMeizu() && isHigher;}/*** 判断是否为魅族*/public static boolean isMeizu() {return isSpecialBoardPhone(MEIZUBOARD) || isFlyme();}/*** 判断是否为小米,详见https://dev.mi.com/doc/?p=254*/public static boolean isXiaomi() {return Build.MANUFACTURER.toLowerCase().equals("xiaomi");}/*** 是否是指定型号的手机*/private static boolean isSpecialBoardPhone(String[] boards) {String board = android.os.Build.BOARD;if (board != null) {for (String b : boards) {if (board.equals(b)) {return true;}}}return false;}
}

2018-4-20

转载于:https://www.cnblogs.com/baiqiantao/p/b97c04c79912e606c917429fdf6533fb.html

判断小米华为等系统 MD相关推荐

  1. 友盟推送集成小米华为魅族系统通道

    前言 大家做过安卓推送服务的都知道,如果安卓设备想要收到推送,就要与服务器建立一个长连接通道(莫非你想轮询??).一旦app被杀掉,维持长连接通道的pushservice服务也会被干掉,所以设备就处于 ...

  2. 华为鸿蒙对比小米,华为鸿蒙系统对比小米MIUI12,到底谁更强!

    ui设计在互联网百科中是这样解释的,ui设计是指对软件的人机交互操作逻辑.界面美观的整体设计,简单翻译一下,就是界面设计.表面内容的设计.emui作为华为多年发展的一个产品,经过不断的优化和迭代,才有 ...

  3. 判断小米 魅族 华为 系统 MIUI EMUI FLYME

    获取系统信息 public class SimpleDeviceUtils {public enum SystemType {/*** 小米手机(MIUI系统)*/SYS_MIUI,/*** 华为手机 ...

  4. Android 判断手机设备是否是小米,华为,魅族设备

    最近接到了需求要搞推送,但是小米和华为系统的特殊性要单独 集成他家自己的推送,所以就去判断下手机品牌型号! 不多说直接开撸,直接将手机品牌的小写全拼写上就可以 此方法目前测试对小米,华为,可用 pub ...

  5. 小米高管否认鸿蒙,小米参加华为鸿蒙系统实验?小米高管终于回应,网友评论炸了!...

    原标题:小米参加华为鸿蒙系统实验?小米高管终于回应,网友评论炸了! 关于华为的自研系统鸿蒙传的沸沸扬扬的,有说8月份就会出的,有说跟着下半年旗舰华为Mate 30一起 出的,也有说是明年才能见到,但总 ...

  6. 国产手机都会用鸿蒙吗,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?来看看...

    从方舟编译器开源,到鸿蒙系统开源,已经着实说明了,华为对于鸿蒙系统的决心.我们曾经说,开源的终局可能是百花齐放,也可能是饿死了师傅,教会了徒弟!但是,华为鸿蒙系统的开源太有必要了,如果它单纯的担心:友 ...

  7. 华为鸿蒙系统小米,继华为鸿蒙之后,又一国产系统在悄悄崛起:小米MIOS全面曝光...

    原标题:继华为鸿蒙之后,又一国产系统在悄悄崛起:小米MIOS全面曝光 来源:全球前沿科技 2018年,国产手机在工业设计以及自主研发等方面,得到了重大突破.他们也在一定程度上,摆脱了三星和苹果对于手机 ...

  8. 鸿蒙系统小米手机,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?...

    原标题:华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗? "极客谈科技",全新视角.全新思路,伴你遨游神奇的科技世界. 鸿蒙系统已于华为全球开发者大会正式发布,荣耀智慧屏将会 ...

  9. 华为手机怎么刷android系统,怎样刷入安卓原生系统 在手机系统更新这件事上,小米华为和OPPOvivo谁更有良心...

    原标题:在手机系统更新这件事上,小米华为和OPPOvivo谁更有良心? 用国产手机的朋友可能都有一种感受,对于系统升级这块,有的厂商很积极,但有的厂商却非常的不积极.比如小米,华为,一加等在系统升级方 ...

最新文章

  1. React接入Sentry.js
  2. 电子学会青少年编程等级考试Python一级题目解析03
  3. System V的启动风格和BSD的启动风格(2)---代码角度
  4. 配置一个 MVC 项目时 遇到的
  5. mysql查询不同老师所教不同课程_mysql学习训练记录及笔记(二)
  6. 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项
  7. Spring AOP之注解配置篇
  8. SAP自学指南:案例公司的需求分析
  9. js 正则 或_一次记住js的6个正则方法
  10. 移动通信matlab实现,现代移动通信中的调制技术研究及Matlab实现
  11. Linux命令查看电脑,linux查看文件大小命令
  12. 数据结构实习(欢迎大家一起在评论区交流学习)
  13. Abnova 基因 FISH 探针丨CCND1(橙色)FISH 探针
  14. 【笔记】初读《SICP》:递归和迭代
  15. 为什么外包公司这么不受欢迎 ?
  16. 00、老徐教你学C语言——C语言学习之道(学习篇)——理论
  17. 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)
  18. 计算机专业的论文的格式,计算机专业毕业论文格式范例
  19. 分享 13 个可以在线制作 360 度全景视图的网站
  20. C++string:查找、替换、插入、删除等

热门文章

  1. Scriptis安装(基于Linkis开发的数据分析工具)
  2. linux sort排序工具和uniq去重工具使用示例
  3. 阿里DataV可视化大屏介绍
  4. python Django数据库保存操作
  5. Linux sh是/bin/bash的快捷方式
  6. MySQL优化union查询
  7. 辽宁省计算机专业最好的本科学校有哪些,辽宁省哪所大学最好-辽宁省排名前十的大学排名...
  8. drive数据集_英伟达的最强人脸GAN开源了,它吃的高清数据集也开源了
  9. 查看docker运行状态_docker商业版受限?请了解下crio
  10. Centos7安装tengine-2.3.2版本