安卓获取内部存储信息

目录

  • 前言
  • 获取存储容量


前言

在这里插入图片描述

原生系统设置里的存储容量到底是怎么计算的,跟踪源码,涉及到VolumeInfo、StorageManagerVolumeProvider、PrivateStorageInfo、StorageStatsManager......等等,java上层没有办法使用简单的api获取到吗?搞了半天,总算获取到了,话不多说,直接上代码。

获取存储容量

    /*** 内部总存储空间*/public static long getStorageTotal(Context context) {StorageStatsManager storageStatsManager = (StorageStatsManager) context.getSystemService(STORAGE_STATS_SERVICE);try {return storageStatsManager.getTotalBytes(StorageManager.UUID_DEFAULT);} catch (IOException e) {e.printStackTrace();}return 0;}/*** 内部可用空间*/public static long getStorageFree(Context context) {StorageStatsManager storageStatsManager = (StorageStatsManager) context.getSystemService(STORAGE_STATS_SERVICE);try {return storageStatsManager.getFreeBytes(StorageManager.UUID_DEFAULT);} catch (IOException e) {e.printStackTrace();}return 0;}/*** SD卡总空间*/public static long getSdCardTotal(Context context) {// 获取所有可用的存储卷File[] externalFiles = context.getExternalFilesDirs(null);for (File file : externalFiles) {if (Environment.isExternalStorageRemovable(file) && !file.getAbsolutePath().contains("emulated")) {StatFs stat = new StatFs(file.getPath());long blockSize = stat.getBlockSizeLong();long totalBlocks = stat.getBlockCountLong();return totalBlocks * blockSize;}}return 0;}/*** SD卡可用空间*/public static long getSdCardFree(Context context) {// 获取所有可用的存储卷File[] externalFiles = context.getExternalFilesDirs(null);for (File file : externalFiles) {if (Environment.isExternalStorageRemovable(file) && !file.getAbsolutePath().contains("emulated")) {StatFs stat = new StatFs(file.getPath());long blockSize = stat.getBlockSizeLong();long availableBlocks = stat.getAvailableBlocksLong();return availableBlocks * blockSize;}}return 0;}// 格式化文件大小为人类可读的格式private static String formatFileSize(long size) {String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};int unitIndex = 0;double fileSize = size;while (fileSize > 1000 && unitIndex < units.length - 1) {fileSize = fileSize / 1000;unitIndex++;}return String.format("%.2f %s", fileSize, units[unitIndex]);}

打印下log看一下:

在这里插入图片描述


细心的小伙伴肯定发现单位换算是1000而不是1024了,为什么呢?

其实跟我们电脑上的硬盘存储一样,我们买硬盘的时候会发现1T的容量实际只有930G左右,厂商会解释说那是因为电脑系统采用的1024进制造成容量识别误差,因为厂商们生产的时候都是按照1T=1000G…1KB=1000B的进制的,现在手机厂商也学了这一套,标出64G,128G的容量也是按照1000进制的。 奸商啊,要是1024岂不是能放更多东西,哼,

UUID是什么?

UUID_DEFAULT 是一个常量,表示默认存储的 UUID。在这里,它代表默认存储卷的 UUID,通常指的是内部存储或者主要的外部存储(比如 SD 卡)。

在 Android 设备上,不同的存储卷可以具有不同的标识符(UUID),用于唯一标识每个存储卷。StorageManager.UUID_DEFAULT 是指向默认存储卷的 UUID,因此在获取存储信息时,使用这个 UUID 可以获得默认存储卷的存储空间信息。
在这里插入图片描述
更进一步的了解,参考谷歌官方:
UUID

StatFs
另外一点就是StatFs,StatFs 类是 Android 提供的用于获取文件系统信息的类,通常使用 StatFs 类来获取存储卷(如内部存储、外部 SD 卡)的文件系统信息,在应用程序中对存储空间进行监测和管理。通过 StatFs 可以获取存储卷的总大小、可用大小、文件块的大小等信息,我们这里就是使用不同文件系统的块数*每块的字节数进而获取总大小的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

穿越无人机中涉及到的算法主要包括以下几种:

当涉及穿越无人机中的算法时&#xff0c;我们可以从以下几个方面进行详细分析&#xff0c;并尽量参考文章中的相关数字和信息&#xff1a; 1.捷联式惯性导航系统&#xff1a; 定义&#xff1a; 利用加速度计和陀螺仪等惯性元件&#xff0c;直接测量飞行器的角运动信息和线运动…

深入解析Python中的两种导入方法:from...import与import

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、from...import与import的基本区别 1. 导入方式的不同 2. 命名空间的差异 三…

Linux基础知识点总结!超详细

Linux 的学习对于一个IT工程师的重要性是不言而喻的&#xff0c;学好它是工程师必备修养之一。 Linux 基础 操作系统 操作系统Operating System简称OS&#xff0c;是软件的一部分&#xff0c;它是硬件基础上的第一层软件&#xff0c;是硬件和其它软件沟通的桥梁。 操作系统…

软件项目管理 - 作业集合

软件项目管理 - 作业集合 作业一 1、项目与日常运作的主要区别有哪些&#xff1f; 项目&#xff1a;为提供一项独特产品、服务或成果所做的临时性努力 运作&#xff1a;连续不断周而复始的活动 项目是一次性的&#xff0c;日常运作是重复进行的&#xff1b; 项目是以目标为导…

CI/CD:持续集成/持续部署

1. 安装docker、docker-compose # 安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i sdownload.docker.commirrors.aliyun.com/docker-ce /…

neo4j docker安装使用,py2neo python包使用

参考&#xff1a;https://neo4j.com/docs/operations-manual/current/docker/introduction/ 运行&#xff1a; docker run --publish7474:7474 --publish7687:7687 neo4j查看&#xff1a; http://192***ip:7474 username/password 都是 neo4j/neo4j 简单案例 创建例子&am…

前端数据存储之cookie、LocalStorage与SessionStorage

JS详解Cookie、LocalStorage与SessionStorage 基本概念 Cookie Cookie是小甜饼的意思。顾名思义&#xff0c;cookie确实非常小&#xff0c;它的大小限制为4KB左右。他的主要用途又保存登录信息&#xff0c;比如你登录某个网站市场可以看到“记住密码”&#xff0c;这通常就是…

重生之 SpringBoot3 入门保姆级学习(04、 包扫描)

重生之 SpringBoot3 入门保姆级学习&#xff08;04、 包扫描&#xff09; 2.1 包扫描 2.1 包扫描 默认包扫描规则&#xff1a; SpringBootApplication 标注的就是主程序 SpringBoot 只会扫描主程序下面的包 自动的 component-scan 功能 在 SpringBootApplication 添加参数可以…

前端开发工程师——AngularJS

一.表达式和语句 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

【C语言】char,short char,long char分别是多少字节,多少位,多少bit

一&#xff0c;char&#xff0c;short char&#xff0c;long char分别是多少字节 在 C 语言中&#xff0c;char、short、int、long 这些数据类型的大小是平台相关的&#xff0c;它们的大小取决于编译器和操作系统的实现。然而&#xff0c;它们的大小通常遵循以下规则&#xff…

创新融合,5G+工业操作系统引领未来工厂

为加速企业完成生产制造自动化和经营管理自动化&#xff0c;从而走向未来工厂&#xff0c;蓝卓不断探索supOS工业操作系统与前沿技术的的创新融合&#xff0c;而5G技术为工业操作系统提供了更多元化的赋能手段和想象空间。目前&#xff0c;supOS围绕生产、安全、质检、监控等领…

语音转文字软件哪个好?掌握这3个方法,告别手写记录

开会多又杂&#xff0c;手写记录累死人&#xff1f; 每天的工作日程中&#xff0c;会议总是不可或缺的一部分。不论是团队讨论还是项目汇报&#xff0c;会议记录都是必不可少的。但手写记录会议内容不仅耗时耗力&#xff0c;还容易遗漏重要信息。 那么&#xff0c;有没有更高…

张驰咨询:六西格玛培训,IT界的“福尔摩斯”

六西格玛&#xff0c;这个曾以制造业为背景的管理理念&#xff0c;如今却在IT领域大放异彩。其背后的原因&#xff0c;不仅仅是因为六西格玛追求零缺陷、持续改进的核心价值观与IT行业对产品质量和用户体验的极致追求不谋而合&#xff0c;更是因为它提供了一种全新的思维方式和…

2024.05.28|生信早报【AI测试版】

日期&#xff1a;2024-05-28 拓尔思&#xff1a;拓知全球基因专利数据库助力合成生物研发&#xff0c;规避专利申请风险。和元生物&#xff1a;连续亏损&#xff0c;累计亏损1.7亿元&#xff0c;基因治疗CRO业务推出新服务。国际生物多样性日&#xff1a;杭州打造“北纬30度生…

【pyTorch安装版本真麻烦】

1、pytorch 2.0.1版本可以用cuda11.7 # CUDA 11.7 conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvidia 2、pytorch 2.1 版本后最低cuda11.8 3、安装pytorch时候&#xff0c;注意torchaudio 版本 总之注意pyTorch安装版本…

C语言作为计算机行业的基础之一,是否制约了行业本身的发展?

c不是计算机行业的基础啦&#xff0c;你想&#xff0c;c语言出现时已经有一套成熟的计算机体系&#xff0c;有基于内存地址的寻找指令、数据的工作方式&#xff0c;有汇编语言&#xff0c;那搞出c这种高级语言就很正常啊&#xff01;刚好我有一些资料&#xff0c;是我根据网友给…

设计、运营与前端:三者间的微妙区别与联系

设计、运营与前端&#xff1a;三者间的微妙区别与联系 在数字化日益深入的今天&#xff0c;设计、运营与前端这三个词汇在我们的工作中频繁出现&#xff0c;它们似乎紧密相连&#xff0c;但又各具特色。本文将深入探讨这三者之间的微妙区别与联系&#xff0c;从四个方面、五个…

第三部分:领域驱动设计之分析模式和设计模式应用于模型

分析模式 分析模式是一种概念集合&#xff0c;用来表示业务建模中的常见结构。它可能只与一个领域有关&#xff0c;也可能跨越多个领域。“分析模式”这个名字本身就强调了其概念本质。分析模式并不是技术解决方案&#xff0c;他们只是些参考&#xff0c;用来指导人们设计特定领…

数仓建模—数据管理能力成熟度评估模型(DCMM)

文章目录 数仓建模—数据管理能力成熟度评估模型(DCMM)数据管理能力成熟度研究现状国外研究现状国内研究现状DCMM与其他数据管理体系有什么区别什么是DCMMDCMM 包含哪些内容DCMM等级评估等级划分什么样的企业可以申请DCMM评估DCMM评估流程评估细节评估方式评估类型评估参考标准…

西安航空学院电子工程学院领导莅临泰迪智能科技参观交流

5月26日&#xff0c;西安航空学院电子工程学院院长杨亚萍、专业教师刘坤莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技董事长张良均、副总经理施兴、产品中心负责周东平、校企合作经理吴桂锋与泰迪智能科技韩伟进行热情了接待。双方就专业建设、协同…