当前位置: 首页 > news >正文

Android设备路径及容量的读取

为什么80%的码农都做不了架构师?>>>   hot3.png

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;
    }


转载于:https://my.oschina.net/Gxhpro/blog/419044

相关文章:

  • [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.5
  • Linux安装mysql mysql5.5.40 NIOT
  • 构建高效且可伸缩的结果缓存
  • LVS四种负载均衡类型,十种调度方法
  • Skype for Business Server 2015-04-前端服务器-7-部署
  • Rails: No such file or directory - getcwd
  • GitHub 基本常用知识解答
  • Spring+Mybatis+Velocity配置
  • Startssl SSL 证书申请图解
  • loadrunner关联及web_reg_save_param方法浅析
  • Jquery Mobile 百度地图 Demo
  • Linux系统日常管理2 tcpdump,iptables
  • cocos2d-x3.0 经常使用绘图方法
  • pear安装模块出现报错——could not extract the package.xml
  • 微信天气接口查询
  • ES6指北【2】—— 箭头函数
  • Google 是如何开发 Web 框架的
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular4 模板式表单用法以及验证
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • CSS中外联样式表代表的含义
  • Git学习与使用心得(1)—— 初始化
  • leetcode386. Lexicographical Numbers
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • log4j2输出到kafka
  • Mithril.js 入门介绍
  • Ruby 2.x 源代码分析:扩展 概述
  • WePY 在小程序性能调优上做出的探究
  • 对超线程几个不同角度的解释
  • 类orAPI - 收藏集 - 掘金
  • 少走弯路,给Java 1~5 年程序员的建议
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 《天龙八部3D》Unity技术方案揭秘
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #DBA杂记1
  • #NOIP 2014# day.2 T2 寻找道路
  • ${factoryList }后面有空格不影响
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (27)4.8 习题课
  • (Python) SOAP Web Service (HTTP POST)
  • (笔试题)合法字符串
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)springcloud实战之config配置中心
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (五)网络优化与超参数选择--九五小庞
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***测试-HTTP方法
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core 2.1路线图
  • .net core 依赖注入的基本用发