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

获取系统信息

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);
	}
}

1

80

1

public class SimpleDeviceUtils {

2

    

3

    public enum SystemType {

4

        /**

5

         * 小米手机(MIUI系统)

6

         */

7

        SYS_MIUI,

8

        /**

9

         * 华为手机(EMUI系统)

10

         */

11

        SYS_EMUI,

12

        /**

13

         * 魅族手机,FLYME系统

14

         */

15

        SYS_FLYME,

16

        /**

17

         * 其他系统

18

         */

19

        SYS_OTHER

20

    }

21

    

22

    private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";

23

    private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";

24

    private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";

25

    

26

    private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level";

27

    private static final String KEY_EMUI_VERSION = "ro.build.version.emui";

28

    private static final String KEY_EMUI_CONFIG_HW_SYS_VERSION = "ro.confg.hw_systemversion";

29

    

30

    /**

31

     * 8.0之后有些系统信息获取不到,没有在各种版本手机上逐一测试

32

     */

33

    public static SystemType getSystemType() {

34

        try {

35

            Properties prop = new Properties();

36

            prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));

37

            if (Build.MANUFACTURER.toLowerCase().equals("xiaomi")//官方提供的判断是否为小米手机(而非MIUI系统)的方法

38

                    || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null//QMUI提供的判断是否是MIUI的方法

39

                    || prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null//下面两个是网上补充的方法,感觉没必要的

40

                    || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null) {

41

                return SystemType.SYS_MIUI;

42

            } else if (isEMUI()//华为

43

                    || prop.getProperty(KEY_EMUI_API_LEVEL, null) != null

44

                    || prop.getProperty(KEY_EMUI_VERSION, null) != null

45

                    || prop.getProperty(KEY_EMUI_CONFIG_HW_SYS_VERSION, null) != null) {

46

                return SystemType.SYS_EMUI;

47

            } else if (isMeizu()//魅族推送SDK中提供的判断是否是魅族的方法

48

                    || DeviceHelper.isMeizu()) {//QMUI提供的判断是否是魅族的方法

49

                return SystemType.SYS_FLYME;

50

            }

51

        } catch (IOException e) {

52

            e.printStackTrace();

53

        }

54

        return SystemType.SYS_OTHER;

55

    }

56

    

57

    @SuppressLint("PrivateApi")

58

    private static boolean isEMUI() {

59

        Class<?>[] clsArray = new Class<?>[]{String.class};

60

        Object[] objArray = new Object[]{"ro.build.version.emui"};

61

        try {

62

            Class<?> SystemPropertiesClass = Class.forName("android.os.SystemProperties");

63

            Method get = SystemPropertiesClass.getDeclaredMethod("get", clsArray);

64

            String version = (String) get.invoke(SystemPropertiesClass, objArray);

65

            Log.i("bqt", "EMUI version is:" + version);

66

            return !TextUtils.isEmpty(version);

67

        } catch (Exception e) {

68

            e.printStackTrace();

69

        }

70

        return false;

71

    }

72

    

73

    /**

74

     * 判断是否为魅族设备

75

     */

76

    private static boolean isMeizu() {

77

        String model = SystemProperties.get("ro.meizu.product.model");

78

        return (!TextUtils.isEmpty(model)) || "meizu".equalsIgnoreCase(Build.BRAND) || "22c4185e".equalsIgnoreCase(Build.BRAND);

79

    }

80

}

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 denied
			FileInputStream 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.4
		boolean 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;
	}
}

169

1

//判断系统厂商,里面的内容基本都来自QMUI库

2

public class DeviceHelper {

3

    private final static String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";

4

    private static final String KEY_FLYME_VERSION_NAME = "ro.build.display.id";

5

    private final static String FLYME = "flyme";

6

    private final static String MEIZUBOARD[] = {"m9", "M9", "mx", "MX"};

7

    private static String sMiuiVersionName;

8

    private static String sFlymeVersionName;

9

    

10

    static {

11

        Properties properties = new Properties();

12

        

13

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {// android 8.0,读取 /system/build.prop 会报 permission denied

14

            FileInputStream fileInputStream = null;

15

            try {

16

                fileInputStream = new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"));

17

                properties.load(fileInputStream);

18

            } catch (Exception e) {

19

                e.printStackTrace();

20

            } finally {

21

                if (fileInputStream != null) {

22

                    try {

23

                        fileInputStream.close();

24

                    } catch (IOException e) {

25

                        e.printStackTrace();

26

                    }

27

                }

28

            }

29

        }

30

        

31

        try {

32

            Class<?> clzSystemProperties = Class.forName("android.os.SystemProperties");

33

            Method getMethod = clzSystemProperties.getDeclaredMethod("get", String.class);

34

            sMiuiVersionName = getLowerCaseName(properties, getMethod, KEY_MIUI_VERSION_NAME);

35

            sFlymeVersionName = getLowerCaseName(properties, getMethod, KEY_FLYME_VERSION_NAME);

36

        } catch (Exception e) {

37

            e.printStackTrace();

38

        }

39

    }

40

    

41

    private static String getLowerCaseName(Properties p, Method get, String key) {

42

        String name = p.getProperty(key);

43

        if (name == null) {

44

            try {

45

                name = (String) get.invoke(null, key);

46

            } catch (Exception e) {

47

                e.printStackTrace();

48

            }

49

        }

50

        if (name != null) name = name.toLowerCase();

51

        return name;

52

    }

53

    

54

    private static boolean sIsTabletChecked = false;

55

    private static boolean sIsTabletValue = false;

56

    

57

    /**

58

     * 判断是否为平板设备

59

     */

60

    public static boolean isTablet(Context context) {

61

        if (sIsTabletChecked) {

62

            return sIsTabletValue;

63

        } else {

64

            sIsTabletChecked = true;

65

            sIsTabletValue = (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >=

66

                    Configuration.SCREENLAYOUT_SIZE_LARGE;

67

            return sIsTabletValue;

68

        }

69

    }

70

    

71

    /**

72

     * 判断是否是flyme系统

73

     */

74

    public static boolean isFlyme() {

75

        return !TextUtils.isEmpty(sFlymeVersionName) && sFlymeVersionName.contains(FLYME);

76

    }

77

    

78

    /**

79

     * 判断是否是MIUI系统

80

     */

81

    public static boolean isMIUI() {

82

        return !TextUtils.isEmpty(sMiuiVersionName);

83

    }

84

    

85

    public static boolean isMIUIV5() {

86

        return "v5".equals(sMiuiVersionName);

87

    }

88

    

89

    public static boolean isMIUIV6() {

90

        return "v6".equals(sMiuiVersionName);

91

    }

92

    

93

    public static boolean isMIUIV7() {

94

        return "v7".equals(sMiuiVersionName);

95

    }

96

    

97

    public static boolean isMIUIV8() {

98

        return "v8".equals(sMiuiVersionName);

99

    }

100

    

101

    public static boolean isMIUIV9() {

102

        return "v9".equals(sMiuiVersionName);

103

    }

104

    

105

    public static boolean isFlymeVersionHigher5_2_4() {

106

        //查不到默认高于5.2.4

107

        boolean isHigher = true;

108

        if (sFlymeVersionName != null && !sFlymeVersionName.equals("")) {

109

            Pattern pattern = Pattern.compile("(\\d+\\.){2}\\d");

110

            Matcher matcher = pattern.matcher(sFlymeVersionName);

111

            if (matcher.find()) {

112

                String versionString = matcher.group();

113

                if (versionString != null && !versionString.equals("")) {

114

                    String[] version = versionString.split("\\.");

115

                    if (version.length == 3) {

116

                        if (Integer.valueOf(version[0]) < 5) {

117

                            isHigher = false;

118

                        } else if (Integer.valueOf(version[0]) > 5) {

119

                            isHigher = true;

120

                        } else {

121

                            if (Integer.valueOf(version[1]) < 2) {

122

                                isHigher = false;

123

                            } else if (Integer.valueOf(version[1]) > 2) {

124

                                isHigher = true;

125

                            } else {

126

                                if (Integer.valueOf(version[2]) < 4) {

127

                                    isHigher = false;

128

                                } else if (Integer.valueOf(version[2]) >= 5) {

129

                                    isHigher = true;

130

                                }

131

                            }

132

                        }

133

                    }

134

                    

135

                }

136

            }

137

        }

138

        return isMeizu() && isHigher;

139

    }

140

    

141

    /**

142

     * 判断是否为魅族

143

     */

144

    public static boolean isMeizu() {

145

        return isSpecialBoardPhone(MEIZUBOARD) || isFlyme();

146

    }

147

    

148

    /**

149

     * 判断是否为小米,详见https://dev.mi.com/doc/?p=254

150

     */

151

    public static boolean isXiaomi() {

152

        return Build.MANUFACTURER.toLowerCase().equals("xiaomi");

153

    }

154

    

155

    /**

156

     * 是否是指定型号的手机

157

     */

158

    private static boolean isSpecialBoardPhone(String[] boards) {

159

        String board = android.os.Build.BOARD;

160

        if (board != null) {

161

            for (String b : boards) {

162

                if (board.equals(b)) {

163

                    return true;

164

                }

165

            }

166

        }

167

        return false;

168

    }

169

}

2018-4-20

原文地址:https://www.cnblogs.com/baiqiantao/p/b97c04c79912e606c917429fdf6533fb.html

时间: 2024-11-10 08:54:46

判断小米 魅族 华为 系统 MIUI EMUI FLYME的相关文章

Android 系统是不是MIUI、Flyme、EMUI

//读取系统配置信息build.prop类 import android.os.Environment; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Collection; import java.util.Enumeration; import java.util.Map.Entry; import java.util.Properties;

Android面试题-机型适配之痛,例如三星、小米、华为、魅族等。

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Android面试题-机型适配之痛,例如三星.小米.华为.魅族等. - 所有技术文章里面全部配置了配套视频 - 博客频道 - CSDN.NET 所有技术文章里面全部配置了配套视频 https://github.com/open-android/Android 目录视图 摘要视

当MIUI遭遇FLYME,你有板砖你拍谁?

在国产手机方面,小米MIUI/魅族Flyme算是手机操作系统中的佼佼者.二者都是基于谷歌Android操作系统而生,随着系统历代升级更迭,系统UI方面已经看不到原生Android的影子,系统方面除了加入了更多符合中国人本身的操作习惯,还将小米/魅族对"用户体验"不同理解融入进去. FLYME是从M8时代就定下的设计风格.设计方向,再到M9再到MX逐步发展起来的:MIUI一开始是从给热门机型做适配开始的,最后也发展成了自成风格的一个.总体上讲FLYME与MIUI,这两者风格是完全不一样的

智能手机的折戟战:小米魅族向下、荣耀向上

2017年京东的618战报已出炉多日. 明星一般的小米除抢得一个总销量的占位之外,其他座次排名方面并未有亮眼成绩,而时常被冠之予梦想与体验的魅族,此次的上榜频率与其发布会热度形成了鲜明的反比关系,联想等老牌厂商更是已经销声匿迹再不见踪影.在这片榜单中,唯一能让人印象深刻的变化有两点:一是360.锤子和美图等并不为人看好的手机品牌意外地入榜,另外则是荣耀以磅礴之势几近碾压整个手机品牌--今年的618电商节中,荣耀以独立身份斩获中国手机品牌销售额第一. 而这,仅仅只是一个节点而已. "互联网思维&q

小米、华为手机 为啥都杀入无障碍体验市场?

每个人都有追求幸福.便捷.舒适生活的权利.即使身体略有缺陷,但依然不能成为他们拒绝使用科技产品的理由.尤其是对于智能手机这一重要.普及.便利的科技产品来说,更需要进行硬件.功能等方面的优化,满足多个人群的使用需求.其中,屏幕及语音交互作为智能手机最重要的交互渠道,成为做好视障人士的服务重要突破口. 目前,小米.华为等国产手机企业纷纷进入无障碍体验市场.但针对视障人士的硬件.功能还只是纯粹的附庸功能,并没有真正深入地研发.优化下去.面对这一潜力巨大的市场,国产手机厂商究竟应该怎么做呢? 无障碍市场

小米开源监控系统Open-Falcon安装使用笔记

前言 近期爆出Zabbix有严重bug,加上一直对zabbix的性能.UI不满.所以这次想钻研一下最近很火的open-falcon,源于小米公司的开源项目,赞一个. 一.官网介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择.当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案.之后,随着业务规模的持续快速

小米网抢购系统开发实践和我的个人观察

本文个人观察部分,为自己的一点看法. 正文内容,转载于 <程序员>2014年11月刊:电商峰值系统架构设计 http://www.csdn.net/article/2014-11-04/2822459 个人观察 1.小米抢购系统,是在小米电商比较成功之后,才开发挂在电商平台上的. 因此,抢购系统刚刚上线,就有很大的流量. 而普通的网站,刚刚上线,流量是逐步增加的. 2.一个周就重新实现了抢购系统,也太牛了吧,似乎有夸张的成份. 3.在现有网站里改造,确实比较难,不能有任何的失误. 升级抢购系统

针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]

其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现,但是俺偏不用啊,偏要自己写啊...ps:真贱! 第一步就是增加个播放的图片..要不然没有按钮多难看! <div class="videoDiv"> <video id="video" poster="" preload="metadata" width="100%" height="100

小米2s升级到miui 39.0后wifi网络不稳定等问题解决

小米2s升级到miui 39.0后,其他貌似没有问题,但是发现wifi不稳定了,很多app都进不去,优酷视频也看不了.怎么破? 网上找了很久,很多人说刷机,这小米尼玛我数据线链接了电脑竟然没有任何提示,各种软件都下遍了,手机助手用wifi连电脑也不行~ 快要放弃的时候,突然发现了一个以前没注意的好地方.就是系统的更新那里,可以按左键(菜单键),出现了一些东西. 选择"重启到Recovery" 然后再选择“重启手机”,然后看到有 “重启进入系统一(最近)” “重启进入系统二”  ,带“最