package com.demo.lib.common.util.device; import android.content.Context; import android.content.pm.PackageManager; import android.telephony.TelephonyManager; import com.demo.lib.common.util.Environment; import com.demo.lib.common.util.common.StringUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.Method; import java.util.Locale; import java.util.Properties; import androidx.core.content.ContextCompat; /** * Created by weikou2015 on 2018/5/17. * 获取手机属性 */ public class MobileUtil { public static final String SYS_EMUI = "sys_emui"; public static final String SYS_MIUI = "sys_miui"; public static final String SYS_FLYME = "sys_flyme"; private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code"; private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"; 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"; /** * 获取当前手机系统语言。 * * @return 返回当前系统语言。例如:当前设置的是“中文-中国”,则返回“zh-CN” */ public static String getSystemLanguage() { return Locale.getDefault().getLanguage(); } /** * 获取当前系统上的语言列表(Locale列表) * * @return 语言列表 */ public static Locale[] getSystemLanguageList() { return Locale.getAvailableLocales(); } /** * 获取当前手机系统版本号 * * @return 系统版本号 */ public static String getSystemVersion() { return android.os.Build.VERSION.RELEASE; } /** * 获取手机型号 * * @return 手机型号 */ public static String getSystemModel() { return android.os.Build.MODEL; } /** * 获取手机厂商 * * @return 手机厂商 */ public static String getDeviceBrand() { return android.os.Build.BRAND; } /** * 获取手机IMEI(需要“android.permission.READ_PHONE_STATE”权限) * * @return 手机IMEI */ public static String getIMEI(Context ctx) { TelephonyManager tm = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); String deviceId=""; if (ContextCompat.checkSelfPermission(ctx, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(ctx, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { deviceId = tm.getDeviceId();// 获取deviceId } return deviceId; } /** * 验证手机格式 */ /* 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188 联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通) 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9 ------------------------------------------------ 13(老)号段:130、131、132、133、134、135、136、137、138、139 14(新)号段:145、147 15(新)号段:150、151、152、153、154、155、156、157、158、159 17(新)号段:170、171、173、175、176、177、178 18(3G)号段:180、181、182、183、184、185、186、187、188、189 */ public static boolean isMobileNum(String mobiles) { String telRegex = "[1][34578]\\d{9}";//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、4、5、7、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。 if (StringUtils.isEmpty(mobiles)) return false; else return mobiles.matches(telRegex); } public static String getSystem() { String SYS = SYS_MIUI; try { Properties prop = new Properties(); prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"))); if (prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null) { SYS = SYS_MIUI;//小米 } else if (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) { SYS = SYS_EMUI;//华为 } else if (getMeizuFlymeOSFlag().toLowerCase().contains("flyme")) { SYS = SYS_FLYME;//魅族 } } catch (IOException e) { e.printStackTrace(); return SYS; } return SYS; } public static String getMeizuFlymeOSFlag() { return getSystemProperty("ro.build.display.id", ""); } private static String getSystemProperty(String key, String defaultValue) { try { Class clz = Class.forName("android.os.SystemProperties"); Method get = clz.getMethod("get", String.class, String.class); return (String) get.invoke(clz, key, defaultValue); } catch (Exception e) { } return defaultValue; } }