0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SDCardUtils封装类应用:设备信息获取实现方法

哆啦安全 来源:哆啦安全 2023-11-13 09:40 次阅读

下面将讲解以上信息的获取方法。

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

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

7efa26dc-81c1-11ee-939d-92fbcf53809c.jpg

小米手机设备信息图

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

二、 设备信息获取实现图

7f047ea2-81c1-11ee-939d-92fbcf53809c.jpg

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

7f12649a-81c1-11ee-939d-92fbcf53809c.jpg

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

7f1a6ef6-81c1-11ee-939d-92fbcf53809c.jpg

产品名、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 卡存储信息

7f2c510c-81c1-11ee-939d-92fbcf53809c.jpg

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

7f33d99a-81c1-11ee-939d-92fbcf53809c.jpg

红米4 手机 RAM、ROM存储信息

7f409392-81c1-11ee-939d-92fbcf53809c.jpg

红米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类。代码如下:

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

}
编辑:黄飞
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125642
  • SD卡
    +关注

    关注

    2

    文章

    530

    浏览量

    63020
  • SDC
    SDC
    +关注

    关注

    0

    文章

    47

    浏览量

    15302
  • 小米手机
    +关注

    关注

    10

    文章

    6393

    浏览量

    74343

原文标题:九、SDCardUtils 封装类

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    离散点采样方法的MATLAB实现

    谁有离散点采样方法的MATLAB实现的代码 老师说是用于图像处理上的基于目标区域和基于目标边界两方法的优势,用阴采样图获取目标图像中目标的
    发表于 03-16 00:16

    CH374获取HID设备设备描述符时,设备出现非应答

    小弟在使用CH374获取HID设备设备描述符时,设备出现非应答 但是在建立阶段是设备是能正确
    发表于 01-02 11:25

    IC器件封装的创建方法

      IC的器件与我们讲的分立器件、逻辑器件不同,下面我们以TPS54531这个电源IC为例讲解IC器件封装创建的方法,查找TPS54531的Datasheet,它的封装
    发表于 09-07 17:42

    基于HarmonyOS位置相关接口,获取设备实时位置,调用HarmonyOS方向传感器,获取方向信息

    封装了位置的基本信息。Slice:MainAbilitySlice应用主页面,位置获取逻辑实现。utils:LogUtil主要作用打印日志
    发表于 08-25 14:34

    怎样通过 ioctl 去获取设备信息

    7.3.3 获取设备信息通过 ioctl 获取设备信息,ioctl 的参数如下:int ioct
    发表于 11-02 08:07

    介绍几款专门获取手机设备信息的App

    如何去查看手机的CPU架构呢?有哪几款专门获取手机设备信息的App呢?
    发表于 11-08 06:42

    HarmonyOS如何实现设备之间的协同?

    。continueAbility 方法可以指定待迁移设备的 ID,该 ID 通过 DeviceUtils 工具获取消息表示设备迁移时的状态
    发表于 03-14 11:16

    通过.net DLL获取USB设备信息

    本帖最后由 nan11403 于 2022-7-16 10:21 编辑 获取USB设备信息,自己可以根据设备描述提取想要的设备VID\
    发表于 07-16 10:18

    CH341T读取I2C设备时无法获取正确的信息如何解决?

    我在使用CH341模块,想实现获取智能电池电量信息的功能,在使用CH341StreamI2C这个方法。智能电池的芯片是支持SMbus的Bq4050,
    发表于 07-18 09:29

    用WCHISP通过串口进行烧录,获取设备信息失败是为什么?

    用WCHISP通过串口进行烧录,断开与设备的串口连接:当选择CH582 串口 烧录时,点击“下载”,则“下载记录” 显示 “等待设备接入” ;当选择CH32V307 串口 烧录时,点击“下载”,则“下载记录”1秒内就显示“获取
    发表于 07-20 07:58

    详解IO设备管理之父调用子类方法的过程

    2.1 注册接口rt_xxx_register设备驱动框架层的注册接口干了2个活:(1)对上,把本类管理接口文件中实现方法传递给父方法
    发表于 10-09 15:18

    Labview中音频的HID转USB通讯需要怎么操作能获取HID设备操作反馈值呢?

    该HID设备属于音频设备,另外属于控制传输类型,请问需要采用哪个模块来获取该HID设备的通讯输入反馈值呢(如按音量加键,需
    发表于 03-25 23:55

    网络化条件下漏洞信息获取及处理方法研究

    针对目前众多计算机安全机构所使用的计算机漏洞信息的现状和存在问题,提出了开源漏洞库批量下载、权威漏洞库查询、信息搜索等漏洞信息自动获取方法
    发表于 11-25 16:59 21次下载
    网络化条件下漏洞<b class='flag-5'>信息</b>的<b class='flag-5'>获取</b>及处理<b class='flag-5'>方法</b>研究

    一种嵌入式软件版本信息获取方法设计与实现

    为了定位嵌入式设备当前运行软件的版本,设计了一种获取嵌入式软件版本信息方法,首先设计电路实现按键检测和LED驱动复用IO脚,当IO脚为输入
    发表于 08-07 19:00 0次下载

    获取USB设备信息的方式介绍

    如果只是重写nativeEvent是不够的,并不能获取设备信息,只能识别热插拔状态。要识别USB设备信息需要用到GUID,先定义
    发表于 07-29 16:52 3738次阅读