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 需要获取手机状态权限
如果是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类。代码如下:
package com.programandroid.utils;import java.util.locale;import android.r.string;import android.content.context;import android.telephony.telephonymanager;import android.util.log;/* * deviceinfoutils.java * * created on: 2017-11-16 * author: wangjie * * welcome attention to weixin public number get more info * * weixin public number : programandroid * 微信公众号 :程序员android * */public class deviceinfoutils { /** * 获取设备宽度(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; } } /** * 获取厂商名 * **/ 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; } /** * 硬件名 * * **/ 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(wange, local: + locale.german); log.e(wange, local: + locale.english); log.e(wangj, local: + locale.us); log.e(wangj, local: + locale.chinese); log.e(wange, local: + locale.taiwan); log.e(wange, local: + locale.france); log.e(wange, local: + locale.french); log.e(wange, local: + locale.germany); log.e(wange, local: + locale.italian); log.e(wangj, local: + locale.japan); log.e(wange, local: + locale.japanese); return locale.getavailablelocales().tostring(); } public static string getdeviceallinfo(context context) { return 1. imei: + getimei(context) + 2. 设备宽度: + getdevicewidth(context) + 3. 设备高度: + getdeviceheight(context) + 4. 是否有内置sd卡: + sdcardutils.issdcardmount() + 5. ram 信息: + sdcardutils.getraminfo(context) + 6. 内部存储信息 + sdcardutils.getstorageinfo(context, 0) + 7. sd卡 信息: + sdcardutils.getstorageinfo(context, 1) + 8. 是否联网: + utils.isnetworkconnected(context) + 9. 网络类型: + utils.getnetworktype(context) + 10. 系统默认语言: + getdevicedefaultlanguage() + 11. 硬件序列号(设备名): + android.os.build.serial + 12. 手机型号: + android.os.build.model + 13. 生产厂商: + android.os.build.manufacturer + 14. 手机fingerprint标识: + android.os.build.fingerprint + 15. android 版本: + android.os.build.version.release + 16. android sdk版本: + android.os.build.version.sdk_int + 17. 安全patch 时间: + android.os.build.version.security_patch + 18. 发布时间: + utils.utc2local(android.os.build.time) + 19. 版本类型: + android.os.build.type + 20. 用户名: + android.os.build.user + 21. 产品名: + android.os.build.product + 22. id: + android.os.build.id + 23. 显示id: + android.os.build.display + 24. 硬件名: + android.os.build.hardware + 25. 产品名: + android.os.build.device + 26. bootloader: + android.os.build.bootloader + 27. 主板名: + android.os.build.board + 28. codename: + android.os.build.version.codename + 29. 语言支持: + getdevicesupportlanguage(); }} 九、sdcardutils 封装类
为了方便查询使用设备信息,小编已经封装成一个utils类。代码如下:

S3C2440的中断寄存器的分类及中断的过程分析
可调电源幅值、频率的陀螺电机
逆变器OEM/ODM生产厂家哪家好
无线对讲机日常使用中的常见问题及正确的操作方法经验分享(下)
使用oprofile对软件做profiling
SDCardUtils封装类应用:设备信息获取实现方法
带你快速了解国内首个加密级数字资产交易平台正式上线!
直流电子负载带载短路,无输出怎么办?
中国移动提出了5G+计划在5G+4G方面需在三方面进行协同发展
芯科普 | 一文了解存储主流配置nMCP
架空地线的作用是什么
2021行家说显示年:合易科技带你遇见技术未来
电子芯闻早报:亿航Ghost 2.0,大疆Phantom X
板级埋人式封装工艺流程与技术
关于AR你需要了解的10个关键数据
“刚柔并济”或将成为未来机器人市场主要方向
排电阻(集成电阻)引线的识别
芯片缺货危机爆发背后的三个根源性问题
贸泽电子备货最新控制集成式电源系统 可控制两相或三相交流电机
电池自动点焊机的安全操作要注意哪些方面