标签:xtu hid size case sources ase over numbers else
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);
}
}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; } ("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库
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;
}
}//判断系统厂商,里面的内容基本都来自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; }}标签:xtu hid size case sources ase over numbers else
原文地址:https://www.cnblogs.com/baiqiantao/p/b97c04c79912e606c917429fdf6533fb.html