zoukankan      html  css  js  c++  java
  • Android 设备信息获取详解

    一、 获取手机基本信息(厂商、型号等参数)

    以小米手机为例,手机常用的基本信息可以在Settings--> About Phone中看到,
    例如下图:

    那么如何获取这些设备信息呢? Android中 通常通过 android.os.Build类方法可以获取更多手机设备信息。

    二、 设备信息获取实现图

    获取手机IMEI、宽、高、是否有SD卡,RAM、ROM、SD卡、是否联网、网络类型

    默认语言,设备名,型号、厂商、Fingerprint、Android 版本、SDK版本、Google 安全patch、发布时间、版本类型、用户名

    三、 获取手机设备 宽、高、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 卡存储信息

    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卡),此大小直接决定着手机可以存储资源的大小,相当于电脑硬盘。

    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("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();
        }
     
        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类。代码如下:

    package com.programandroid.Utils;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.lang.reflect.Method;
     
    import android.app.ActivityManager;
    import android.app.ActivityManager.MemoryInfo;
    import android.content.Context;
    import android.os.Build;
    import android.os.Environment;
    import android.os.StatFs;
    import android.os.storage.StorageManager;
    import android.text.TextUtils;
    import android.text.format.Formatter;
     
    /*
     * SDCardUtils.java
     *
     *  Created on: 2017-11-22
     *      Author: wangjie
     * 
     *  Welcome attention to weixin public number get more info
     *
     *  WeiXin Public Number : ProgramAndroid
     *  微信公众号 :程序员Android
     *
     */
    public class SDCardUtils {
     
        private static final int INTERNAL_STORAGE = 0;
        private static final int EXTERNAL_STORAGE = 1;
     
        /**
         * 获取 手机 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);
        }
     
        /**
         * 判断SD是否挂载
         */
        public static boolean isSDCardMount() {
            return Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED);
        }
     
        /**
         * 获取手机存储 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;
     
        }
     
        /**
         * 使用反射方法 获取手机存储路径
         * 
         * **/
        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);
        }
     
        /**
         * 获取手机内部存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getTotalInternalMemorySize(Context context) {
            File file = Environment.getDataDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long blockSizeLong = statFs.getBlockSizeLong();
            long blockCountLong = statFs.getBlockCountLong();
            long size = blockCountLong * blockSizeLong;
            return Formatter.formatFileSize(context, size);
        }
     
        /**
         * 获取手机内部可用存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getAvailableInternalMemorySize(Context context) {
            File file = Environment.getDataDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long availableBlocksLong = statFs.getAvailableBlocksLong();
            long blockSizeLong = statFs.getBlockSizeLong();
            return Formatter.formatFileSize(context, availableBlocksLong
                    * blockSizeLong);
        }
     
        /**
         * 获取手机外部存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getTotalExternalMemorySize(Context context) {
            File file = Environment.getExternalStorageDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long blockSizeLong = statFs.getBlockSizeLong();
            long blockCountLong = statFs.getBlockCountLong();
            return Formatter
                    .formatFileSize(context, blockCountLong * blockSizeLong);
        }
     
        /**
         * 获取手机外部可用存储空间
         * 
         * @param context
         * @return 以M,G为单位的容量
         */
        public static String getAvailableExternalMemorySize(Context context) {
            File file = Environment.getExternalStorageDirectory();
            StatFs statFs = new StatFs(file.getPath());
            long availableBlocksLong = statFs.getAvailableBlocksLong();
            long blockSizeLong = statFs.getBlockSizeLong();
            return Formatter.formatFileSize(context, availableBlocksLong
                    * blockSizeLong);
        }
     
        /**
         * 
         * SD 卡信息
         * */
     
        public static String getSDCardInfo() {
     
            SDCardInfo sd = new SDCardInfo();
            if (!isSDCardMount())
                return "SD card 未挂载!";
     
            sd.isExist = true;
            StatFs sf = new StatFs(Environment.getExternalStorageDirectory()
                    .getPath());
     
            sd.totalBlocks = sf.getBlockCountLong();
            sd.blockByteSize = sf.getBlockSizeLong();
            sd.availableBlocks = sf.getAvailableBlocksLong();
            sd.availableBytes = sf.getAvailableBytes();
            sd.freeBlocks = sf.getFreeBlocksLong();
            sd.freeBytes = sf.getFreeBytes();
            sd.totalBytes = sf.getTotalBytes();
            return sd.toString();
        }
     
        public static class SDCardInfo {
            boolean isExist;
            long totalBlocks;
            long freeBlocks;
            long availableBlocks;
            long blockByteSize;
            long totalBytes;
            long freeBytes;
            long availableBytes;
     
            @Override
            public String toString() {
                return "isExist=" + isExist + "
    totalBlocks=" + totalBlocks
                        + "
    freeBlocks=" + freeBlocks + "
    availableBlocks="
                        + availableBlocks + "
    blockByteSize=" + blockByteSize
                        + "
    totalBytes=" + totalBytes + "
    freeBytes=" + freeBytes
                        + "
    availableBytes=" + availableBytes;
            }
        }
     
        // add start by wangjie for SDCard TotalStorage
        public static String getSDCardTotalStorage(long totalByte) {
     
            double byte2GB = totalByte / 1024.00 / 1024.00 / 1024.00;
            double totalStorage;
            if (byte2GB > 1) {
                totalStorage = Math.ceil(byte2GB);
                if (totalStorage > 1 && totalStorage < 3) {
                    return 2.0 + "GB";
                } else if (totalStorage > 2 && totalStorage < 5) {
                    return 4.0 + "GB";
                } else if (totalStorage >= 5 && totalStorage < 10) {
                    return 8.0 + "GB";
                } else if (totalStorage >= 10 && totalStorage < 18) {
                    return 16.0 + "GB";
                } else if (totalStorage >= 18 && totalStorage < 34) {
                    return 32.0 + "GB";
                } else if (totalStorage >= 34 && totalStorage < 50) {
                    return 48.0 + "GB";
                } else if (totalStorage >= 50 && totalStorage < 66) {
                    return 64.0 + "GB";
                } else if (totalStorage >= 66 && totalStorage < 130) {
                    return 128.0 + "GB";
                }
            } else {
                // below 1G return get values
                totalStorage = totalByte / 1024.00 / 1024.00;
     
                if (totalStorage >= 515 && totalStorage < 1024) {
                    return 1 + "GB";
                } else if (totalStorage >= 260 && totalStorage < 515) {
                    return 512 + "MB";
                } else if (totalStorage >= 130 && totalStorage < 260) {
                    return 256 + "MB";
                } else if (totalStorage > 70 && totalStorage < 130) {
                    return 128 + "MB";
                } else if (totalStorage > 50 && totalStorage < 70) {
                    return 64 + "MB";
                }
            }
     
            return totalStorage + "GB";
        }
        // add end by wangjie for SDCard TotalStorage
     
    }

    希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以加入我们。642830685,免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。

  • 相关阅读:
    Oracle 创建dblink
    好的博客
    Java项目导出war包 security alert:integrity check error”
    tomcat7.0 处理问题
    项目支持Servlet3.0的新特性
    oracle replace函数
    JavaWeb项目连接Oracle数据库
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
  • 原文地址:https://www.cnblogs.com/www642830685/p/14103654.html
Copyright © 2011-2022 走看看