四、获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名
五、获取手机硬件名、SDK版本、android版本 、语言支持、默认语言
六、获取 SD 卡存储信息
七、获取手机 RAM、ROM存储信息
八、DeviceInfoUtils 封装类
九、SDCardUtils 封装类
下面将讲解以上信息的获取方法。
一、 获取手机基本信息(厂商、型号等参数)
=====================
以小米手机为例,手机常用的基本信息可以在Settings
–> About Phone
中看到,
例如下图:
小米手机设备信息图
那么如何获取这些设备信息呢? Android
中 通常通过 android.os.Build
类方法可以获取更多手机设备信息。
二、 设备信息获取实现图
============
获取手机IMEI、宽、高、是否有SD卡,RAM、ROM、SD卡、是否联网、网络类型
默认语言,设备名,型号、厂商、Fingerprint、Android 版本、SDK版本、Google 安全patch、发布时间、版本类型、用户名
产品名、ID、产品名、主板名
三、 获取手机设备 宽、高、IMEI 信息方法
=======================
获取手机宽、高、IMEI
信息方法如下:
`/** * 获取设备宽度(px) * */ public static int getDeviceWidth(Context context) { return context.getResources().getDisplayMetrics().widthPixels; } /** * 获取设备高度(px) */ public static int getDeviceHeight(Context context) { return context.getResources().getDisplayMetrics().heightPixels; } /** * 获取设备的唯一标识, 需要 “android.permission.READ_Phone_STATE”权限 */ public static String getIMEI(Context context) { TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); String deviceId = tm.getDeviceId(); if (deviceId == null) { return "UnKnown"; } else { return deviceId; } }`
注意: 获取IMEI
需要获取手机状态权限
`<!-- 读取手机IMEI的设备权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" />`
如果是Android 6.0
之后的代码请使用动态申请权限的方法申请权限,否认会报安全异常的错误SecurityException
,进而导致运行报错。
如需了解更多 系统安全权限的内容,请看 之前写的文章 Android 系统权限使用详解
四、 获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名的方法
===================================
获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名的方法如下:
`/** * 获取厂商名 * **/ public static String getDeviceManufacturer() { return android.os.Build.MANUFACTURER; } /** * 获取产品名 * **/ public static String getDeviceProduct() { return android.os.Build.PRODUCT; } /** * 获取手机品牌 */ public static String getDeviceBrand() { return android.os.Build.BRAND; } /** * 获取手机型号 */ public static String getDeviceModel() { return android.os.Build.MODEL; } /** * 获取手机主板名 */ public static String getDeviceBoard() { return android.os.Build.BOARD; } /** * 设备名 * **/ public static String getDeviceDevice() { return android.os.Build.DEVICE; } /** * * * fingerprit 信息 * **/ public static String getDeviceFubgerprint() { return android.os.Build.FINGERPRINT; }`
五、 获取手机硬件名、SDK版本、android版本 、语言支持、默认语言等方法
========================================
获取手机硬件名、SDK版本
、android版本
、语言支持、默认语言等方法如下:
`/** * 硬件名 * * **/ public static String getDeviceHardware() { return android.os.Build.HARDWARE; } /** * 主机 * * **/ public static String getDeviceHost() { return android.os.Build.HOST; } /** * * 显示ID * **/ public static String getDeviceDisplay() { return android.os.Build.DISPLAY; } /** * ID * * **/ public static String getDeviceId() { return android.os.Build.ID; } /** * 获取手机用户名 * * **/ public static String getDeviceUser() { return android.os.Build.USER; } /** * 获取手机 硬件序列号 * **/ public static String getDeviceSerial() { return android.os.Build.SERIAL; } /** * 获取手机Android 系统SDK * * @return */ public static int getDeviceSDK() { return android.os.Build.VERSION.SDK_INT; } /** * 获取手机Android 版本 * * @return */ public static String getDeviceAndroidVersion() { return android.os.Build.VERSION.RELEASE; } /** * 获取当前手机系统语言。 */ public static String getDeviceDefaultLanguage() { return Locale.getDefault().getLanguage(); } /** * 获取当前系统上的语言列表(Locale列表) */ public static String getDeviceSupportLanguage() { Log.e("wangjie", "Local:" + Locale.GERMAN); Log.e("wangjie", "Local:" + Locale.ENGLISH); Log.e("wangjie", "Local:" + Locale.US); Log.e("wangjie", "Local:" + Locale.CHINESE); Log.e("wangjie", "Local:" + Locale.TAIWAN); Log.e("wangjie", "Local:" + Locale.FRANCE); Log.e("wangjie", "Local:" + Locale.FRENCH); Log.e("wangjie", "Local:" + Locale.GERMANY); Log.e("wangjie", "Local:" + Locale.ITALIAN); Log.e("wangjie", "Local:" + Locale.JAPAN); Log.e("wangjie", "Local:" + Locale.JAPANESE); return Locale.getAvailableLocales().toString(); }`
六、 获取 SD 卡存储信息
==============
SD卡信息
1.判断SD是否挂载方法
判断SD
是否挂载方法如下:
`/** * 判断SD是否挂载 */ public static boolean isSDCardMount() { return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); }`
2. 获取SD 存储信息的方法
获取SD
存储信息的方法如下:
/** * 获取手机存储 ROM 信息 * * type: 用于区分内置存储于外置存储的方法 * * 内置SD卡 :INTERNAL_STORAGE = 0; * * 外置SD卡: EXTERNAL_STORAGE = 1; * **/ public static String getStorageInfo(Context context, int type) { String path = getStoragePath(context, type); /** * 无外置SD 卡判断 * **/ if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) { return "无外置SD卡"; } File file = new File(path); StatFs statFs = new StatFs(file.getPath()); String stotageInfo; long blockCount = statFs.getBlockCountLong(); long bloackSize = statFs.getBlockSizeLong(); long totalSpace = bloackSize * blockCount; long availableBlocks = statFs.getAvailableBlocksLong(); long availableSpace = availableBlocks * bloackSize; stotageInfo = "可用/总共:" + Formatter.formatFileSize(context, availableSpace) + "/" + Formatter.formatFileSize(context, totalSpace); return stotageInfo; }
3. 获取手机ROM (内置存储,外置存储)存储路径的方法
获取手机ROM
存储信息的方法如下:
/** * 使用反射方法 获取手机存储路径 * * **/ public static String getStoragePath(Context context, int type) { StorageManager sm = (StorageManager) context .getSystemService(Context.STORAGE_SERVICE); try { Method getPathsMethod = sm.getClass().getMethod("getVolumePaths", null); String[] path = (String[]) getPathsMethod.invoke(sm, null); switch (type) { case INTERNAL_STORAGE: return path[type]; case EXTERNAL_STORAGE: if (path.length > 1) { return path[type]; } else { return null; } default: break; } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 获取 手机 RAM 信息 方法 一 * */ public static String getTotalRAM(Context context) { long size = 0; ActivityManager activityManager = (ActivityManager) context .getSystemService(context.ACTIVITY_SERVICE); MemoryInfo outInfo = new MemoryInfo(); activityManager.getMemoryInfo(outInfo); size = outInfo.totalMem; return Formatter.formatFileSize(context, size); } /** * 手机 RAM 信息 方法 二 * */ public static String getTotalRAMOther(Context context) { String path = "/proc/meminfo"; String firstLine = null; int totalRam = 0; try { FileReader fileReader = new FileReader(path); BufferedReader br = new BufferedReader(fileReader, 8192); firstLine = br.readLine().split("\\s+")[1]; br.close(); } catch (Exception e) { e.printStackTrace(); } if (firstLine != null) { totalRam = (int) Math.ceil((new Float(Float.valueOf(firstLine) / (1024 * 1024)).doubleValue())); long totalBytes = 0; } return Formatter.formatFileSize(context, totalRam); } /** * 获取 手机 可用 RAM * */ public static String getAvailableRAM(Context context) { long size = 0; ActivityManager activityManager = (ActivityManager) context .getSystemService(context.ACTIVITY_SERVICE); MemoryInfo outInfo = new MemoryInfo(); activityManager.getMemoryInfo(outInfo); size = outInfo.availMem; return Formatter.formatFileSize(context, size); }
七、获取手机 RAM、ROM存储信息
==================
1.RAM:
运行时内存,此大小直接决定手机运行的流畅度,相当于电脑内存。
2.ROM :
手机存储(分内置SD卡
,外置SD卡
),此大小直接决定着手机可以存储资源的大小,相当于电脑硬盘。
以红米手机为例:
RAM= 1904716KB= 1.82G
红米4 手机 RAM、ROM存储信息
红米4 memory 信息 meminfo
3.获取 RAM
存储信息的方法如下:
`/** * 获取 手机 RAM 信息 * */ public static String getRAMInfo(Context context) { long totalSize = 0; long availableSize = 0; ActivityManager activityManager = (ActivityManager) context .getSystemService(context.ACTIVITY_SERVICE); MemoryInfo memoryInfo = new MemoryInfo(); activityManager.getMemoryInfo(memoryInfo); totalSize = memoryInfo.totalMem; availableSize = memoryInfo.availMem; return "可用/总共:" + Formatter.formatFileSize(context, availableSize) + "/" + Formatter.formatFileSize(context, totalSize); }`
4. 获取手机ROM
存储信息的方法如下:
/** * 获取手机存储 ROM 信息 * * type: 用于区分内置存储于外置存储的方法 * * 内置SD卡 :INTERNAL_STORAGE = 0; * * 外置SD卡: EXTERNAL_STORAGE = 1; * **/ public static String getStorageInfo(Context context, int type) { String path = getStoragePath(context, type); /** * 无外置SD 卡判断 * **/ if (isSDCardMount() == false || TextUtils.isEmpty(path) || path == null) { return "无外置SD卡"; } File file = new File(path); StatFs statFs = new StatFs(file.getPath()); String stotageInfo; long blockCount = statFs.getBlockCountLong(); long bloackSize = statFs.getBlockSizeLong(); long totalSpace = bloackSize * blockCount; long availableBlocks = statFs.getAvailableBlocksLong(); long availableSpace = availableBlocks * bloackSize; stotageInfo = "可用/总共:" + Formatter.formatFileSize(context, availableSpace) + "/" + Formatter.formatFileSize(context, totalSpace); return stotageInfo; }
八、DeviceInfoUtils 封装类
=====================
为了方便查询使用设备信息,小编已经封装成一个Utils
类。代码如下: