1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 判断小米 魅族 华为 系统 MIUI EMUI FLYME

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

时间:2019-01-20 13:26:54

相关推荐

判断小米 魅族 华为 系统 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);}}

1801

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 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 = pile("(\\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();}/*** 判断是否为小米,详见/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;}}

1691

//判断系统厂商,里面的内容基本都来自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 = pile("(\\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

* 判断是否为小米,详见/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

}

-4-20

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。