文档章节

Android设备路径及容量的读取

我家有宝
 我家有宝
发布于 2015/05/24 14:15
字数 396
阅读 59
收藏 0

1.android设备上的所有外接设备路径总结:

/**
     * USB外接设备挂载路径
     */
    public static final String USB_STORAGE = "/mnt/usb_storage";

    /**
     * 外置内存卡路径
     */
    public static final String EXTERNAL_SD = "/mnt/external_sd";

    /**
     * 内置内存卡路径
     */
    public static final String INTERNAL_SD = Environment.getExternalStorageDirectory().getAbsolutePath();

或者可以采用代码读取方法获取所有存储设备的路径,读取方法为:
List<String> pathsList = new ArrayList<String>();
        
        StorageManager storageManager = (StorageManager) cxt.getSystemService(Context.STORAGE_SERVICE);
        try
        {
            Method method = StorageManager.class.getDeclaredMethod("getVolumePaths");
            method.setAccessible(true);
            Object result = method.invoke(storageManager);
            if (result != null && result instanceof String[])
            {
                String[] pathes = (String[]) result;
                StatFs statFs;
                for (String path : pathes)
                {
                    if (!TextUtils.isEmpty(path) && new File(path).exists())
                    {
                        statFs = new StatFs(path);
                        if (statFs.getBlockCount() * statFs.getBlockSize() != 0)
                        {
                            pathsList.add(path);
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            File externalFolder = Environment.getExternalStorageDirectory();
            if (externalFolder != null)
            {
                pathsList.add(externalFolder.getAbsolutePath());
            }
        }
        // }
        return pathsList.toArray(new String[pathsList.size()]);

2.容量获取方法

long availableSize = FileUtils.getAvailableSize(path);
        long usedSize,totalSize;
        if (path.startsWith(AppContants.USB_STORAGE))
        {
            usedSize = MeasurementUtils.measureDirectory(path);
            totalSize = availableSize + usedSize;
        }
        else
        {
            totalSize = FileUtils.getTotalSize(path);
            usedSize = totalSize - availableSize;
        }
其中,MeasurementUtils工具类为从android源码中的com.android.defcontainer包下获得的,如欲使用,
请从相应的包下获得并原样复制包名和类到你的应用下;
FileUtils工具类的方法为:
/**
     * 获取指定目录总空间
     * 
     * @param path
     * @return
     */
    @SuppressWarnings("deprecation")
    public static long getTotalSize(String path)
    {
        StatFs stat = new StatFs(path);
        long blockSize, totalBlocks;
        // 判断手机Android版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
        {
            blockSize = stat.getBlockSizeLong();
            totalBlocks = stat.getBlockCountLong();
            // availableBlocks = stat.getAvailableBlocksLong();
        }
        else
        {
            blockSize = stat.getBlockSize();
            totalBlocks = stat.getBlockCount();
            // availableBlocks = stat.getAvailableBlocks();
        }

        long totalSize = totalBlocks * blockSize;

        return totalSize;
    }

/**
     * 计算指定目录可用空间
     * 
     * @param path
     * @return
     */
    @SuppressWarnings("deprecation")
    public static long getAvailableSize(String path)
    {
        StatFs stat = new StatFs(path);
        long blockSize, availableBlocks;
        // 判断手机Android版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
        {
            blockSize = stat.getBlockSizeLong();
            // totalBlocks = stat.getBlockCountLong();
            availableBlocks = stat.getAvailableBlocksLong();
        }
        else
        {
            blockSize = stat.getBlockSize();
            // totalBlocks = stat.getBlockCount();
            availableBlocks = stat.getAvailableBlocks();
        }

        // long totalSize = totalBlocks * blockSize;
        long availSize = availableBlocks * blockSize;

        return availSize;
    }


© 著作权归作者所有

我家有宝
粉丝 8
博文 69
码字总数 46410
作品 0
南京
高级程序员
私信 提问
Android SD卡路径问题以及如何获取SDCard 内存

在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好...

Clownflsh
2012/03/13
500
0
Android 上层应用读写设备节点

Android 上层应用读写设备节点 Android L [TOC] 1. Android 设备节点 Android基于Linux内核。设备节点文件是设备驱动的逻辑文件,可以通过设备节点来访问设备驱动。 很多设备信息都可存储在节...

rustfisher
2016/01/06
0
0
android手机在slackware linux上的调试

android手机在windows环境下可以通过安装google的usb driver后使用豌豆夹或91助手等工具直接与android手机设备通信。但是在linux上则不同,下面介绍一下在slackware linux 13.37 x86_64位上如...

linuxhunter
2012/02/29
801
2
Android 小项目之--解析如何获取SDCard 内存

1、讲述 Environment 类。 2、讲述 StatFs 类。 3、完整例子读取 SDCard 内存 1、讲述 Environment 类 Environment 是一个提供访问环境变量的类。 Environment 包含常量: MEDIA_BAD_REMOVA...

鉴客
2011/11/27
489
0
android 设备唯一码的获取,Cpu号,Mac地址

开发Android应用中,我们常常需要设备的唯一码来确定客户端。 Android 中的几中方法,使用中常常不可靠 DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。通过 Tele...

韩工
2012/08/29
3.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

JDBC+C3P0+DBCP 基本使用

1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. 2.mysql的处理 这里的JDBC使用Mysql作为...

Blueeeeeee
9分钟前
2
0
MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
9
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
7
0
安装Genymotion模拟器慢的解决方案

第一步点击下载, C:\Users\Administrator\AppData\Local\Genymobile\genymotion.log 中搜索 ova 会发现这个文件 使用迅雷下载即可. 在 虚拟机中导入这个.ova 文件 即可安装...

chenhongjiang
今天
5
0
4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

你好,我是彤哥,本篇是netty系列的第四篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的N...

彤哥读源码
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部