Android 设备信息获取

四、获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名

五、获取手机硬件名、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类。代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值