android SD卡路径问题以及如何获取SDCard 内存

Android 获取内外SD卡路径 这些方法能帮助开发者在应用中合理管理和使用存储空间,确保应用稳定运行。在编写相关代码时,务必遵守Android官方的开发指南和最佳实践。 阅读详情

SD卡路径问题以及如何获取SDCard 内存

昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题。较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用户。讲述的内容如下:

· 0、获取sd卡路径。

· 1、讲述 Environment 类。

· 2、讲述 StatFs 类。

· 3、完整例子读取 SDCard 内存


0、获取sd卡路径 
方法一: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); //写死绝对路径,不赞成使用 
方法: String  path=android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
方法二: 
public String getSDPath(){ 
       File sdDir = null; 
       boolean sdCardExist = Environment.getExternalStorageState()   
                           .equals(android.os.Environment.MEDIA_MOUNTED);   //判断sd卡是否存在 
       if   (sdCardExist)   
       {                               
         sdDir = Environment.getExternalStorageDirectory();//获取跟目录 
      }   
       return sdDir.toString(); 
       
} 

然后:在后面加上斜杠,在加上文件名 
String fileName = getSDPath() +"/" + name;//以name存在目录中 


1、讲述 Environment 类 
Environment 是一个提供访问环境变量的类。 
Environment 包含常量: 

· MEDIA_BAD_REMOVAL 
解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除

· MEDIA_CHECKING 
解释:返回getExternalStorageState() ,表明对象正在磁盘检查。

· MEDIA_MOUNTED 
解释:返回getExternalStorageState() ,表明对象是否存在并具有读/写权限

· MEDIA_MOUNTED_READ_ONLY 
解释:返回getExternalStorageState() ,表明对象权限为只读

· MEDIA_NOFS 
解释:返回getExternalStorageState() ,表明对象为空白或正在使用不受支持的文件系统。

· MEDIA_REMOVED 
解释:返回getExternalStorageState() ,如果不存在 SDCard 返回

· MEDIA_SHARED 
解释:返回getExternalStorageState() ,如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回

· MEDIA_UNMOUNTABLE 
解释:返回getExternalStorageState() ,返回 SDCard 不可被安装 如果 SDCard 是存在但不可以被安装

· MEDIA_UNMOUNTED 
解释:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard   是存在但是没有被安装

Environment 常用方法: 

· 方法:getDataDirectory() 
解释:返回 File ,获取 Android 数据目录。

· 方法:getDownloadCacheDirectory() 
解释:返回 File ,获取 Android 下载/缓存内容目录。

· 方法:getExternalStorageDirectory() 
解释:返回 File ,获取外部存储目录即 SDCard

· 方法:getExternalStoragePublicDirectory(String type) 
解释:返回 File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件

· 方法:getExternalStorageState() 
解释:返回 File ,获取外部存储设备的当前状态

· 方法:getRootDirectory() 
解释:返回 File ,获取 Android 的根目录

2、讲述 StatFs 类 
StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况 
StatFs 常用方法: 

· getAvailableBlocks() 
解释:返回 Int ,获取当前可用的存储空间

· getBlockCount() 
解释:返回 Int ,获取该区域可用的文件系统数

· getBlockSize() 
解释:返回 Int ,大小,以字节为单位,一个文件系统

· getFreeBlocks() 
解释:返回 Int ,该块区域剩余的空间

· restat(String path) 
解释:执行一个由该对象所引用的文件系统

3、完整例子读取 SDCard 内存 
存储卡在 Android 手机上是可以随时插拔的,每次的动作都对引起操作系统进行 ACTION_BROADCAST,本例子将使用上面学到的方法,计算出 SDCard 的剩余容量和总容量。代码如下: 

package com.terry; 

import java.io.File; 
import java.text.DecimalFormat; 

import android.R.integer; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.StatFs; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 

public 
class getStorageActivity extends Activity { 
private Button myButton; 
/** Called when the activity is first created. */ 
@Override 
public 
void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       findView(); 
       viewHolder.myButton.setOnClickListener(new OnClickListener() { 
         
         @Override 
         public 
void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            getSize(); 
         } 
       }); 
} 


void findView(){ 
       viewHolder.myButton=(Button)findViewById(R.id.Button01); 
       viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar); 
       viewHolder.myTextView=(TextView)findViewById(R.id.myTextView); 
} 



void getSize(){ 
       viewHolder.myTextView.setText(""); 
       viewHolder.myBar.setProgress(0); 
      //判断是否有插入存储卡 

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
         File path =Environment.getExternalStorageDirectory(); 
         //取得sdcard文件路径 
         StatFs statfs=new StatFs(path.getPath()); 
         //获取block的SIZE 

long blocSize=statfs.getBlockSize(); 
         //获取BLOCK数量 

long totalBlocks=statfs.getBlockCount(); 
         //己使用的Block的数量 

long availaBlock=statfs.getAvailableBlocks(); 
         
         String[] total=filesize(totalBlocks*blocSize); 
         String[] availale=filesize(availaBlock*blocSize); 
         //设置进度条的最大值 

int maxValue=Integer.parseInt(availale[0]) 
         *viewHolder.myBar.getMax()/Integer.parseInt(total[0]); 
         viewHolder.myBar.setProgress(maxValue); 
         String Text="总共:"+total[0]+total[1]+"\n" 
+"可用:"+availale[0]+availale[1]; 
         viewHolder.myTextView.setText(Text); 
         
       }else 
if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){ 
         Toast.makeText(getStorageActivity.this, "没有sdCard", 1000).show(); 
       } 
} 

//返回数组,下标1代表大小,下标2代表单位 KB/MB 
String[] filesize(long size){ 
       String str=""; 
      if(size>=1024){ 
         str="KB"; 
         size/=1024; 
         if(size>=1024){ 
            str="MB"; 
            size/=1024; 
         } 
       } 
       DecimalFormat formatter=new DecimalFormat(); 
       formatter.setGroupingSize(3); 
       String result[] =new String[2]; 
       result[0]=formatter.format(size); 
       result[1]=str; 
      return result; 
} 
}

RK3568驱动XS9922B:AHD/CVBS双模摄像头兼容性实战 在嵌入式视频开发中,摄像头驱动的稳定性与兼容性往往决定项目交付质量。Linux内核的V4L2框架提供了统一的视频采集抽象,从v4l2_subdev子设备到media controller链路,再到用户态视频节点,每一层都需要精确配置。对于RK3568这类边缘计算平台,其MIPI CSI接口和自研ISP配合RKCIF,构成了完整的多路视频接入通路。当需要接入模拟视频解码芯片时,驱动设计就需同时考虑AHD高清协议与CVBS标清信号的模式切换、格式协商以及寄存器配置。XS9922B作为支持双模输入的解码芯片,可与 阅读详情

相关推荐

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.csdn.net/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.csdn.net/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1923

android 获取SD卡路径

存储卡在 Android 手机上是可以随时插拔的,每次的动作都对引起操作系统进行 ACTION_BROADCAST,本例子将使用上面学到的方法,计算出 SDCard 的剩余容量和总容量。是一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况。是一个提供访问环境变量的类。

guo_lei_lamant的博客 3029

MuJoCo 关节角速度记录与可视化,监控机械臂运动状态

1. 手动计算关节速度,其中timestep为仿真步长。2. 使用data.qvel直接取得关节速度。

darcsdn 767

android获取sd卡路径的各个方法

【代码】android获取sd卡路径的各个方法。

rhj的专栏 1376

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4458

基于模型上下文协议(MCP)的可插拔式临床AI工具链Clinical DS研究(下)

本研究深入探讨了医疗AI在临床落地中的核心矛盾,即如何从“模型能答”迈向“系统可信、可用、可追溯”。为解决此矛盾,我们创新性地提出并详细设计实现了一套基于模型上下文协议(MCP)的**“可插拔式临床AI工具链”**架构。通过将复杂的医疗AI系统解构为Host、MCP Server和标准协议三层,并将各类能力(临床决策、影像分析、合规审计)封装为标准的、可独立演进的Server,我们成功地构建了一个模块化、高内聚、低耦合的系统。

AllenLV的博客 1380

android sdcard路径获取

【代码】android sdcard路径获取。

weixin_51193753的博客 745

利用ADS建立MIPI D-PHY链路仿真流程

由于MIPI D-PHY的速率并不算高,因此,PCB设计难度通常不大,主要做好差分线的等长、阻抗的连续性、端口处的阻抗优化以及控制好走线的长度,拿到满意的结果还是较为轻松的,最后,建立流程化的仿真工程文件,可以保存为模板,方便日后的设计复用,非常方便。

一只豌豆象的博客 3571

Android 获取内外SD卡路径几种方法总结

今天做项目的时候发现获取存储的方式不一样,搞了一个上午,计算sd卡的容量.总结一下.以免后面走弯路 Android 获取SD卡路径: 外置sd卡路径,也许很多同学在平时的工作中并不会用到,因为现在很多机型都不支持外置sd卡(这也是Google目标),所以并不用考虑外置sd卡的路径问题。除了开发文件管理类的应用之外,其他应用使用 Enviroment 方法一: //内置sd卡路径 String sdcardPath = System.getenv("EXTERNAL_STORAGE"); //内置sd卡路径

zh刺客 7126

Claude Code Cli 源码泄露事件全解析:从51万行代码中拆解AI Agent的记忆护城河

2026年3月,Anthropic的AI编程助手Claude Code意外泄露51万行核心代码,暴露了其多Agent架构、六级权限验证系统及创新的记忆机制。记忆系统采用四层设计:用户自定义框架、自动记忆提取、智能上下文压缩和纯文件存储。最独特的是"自动做梦"功能,AI会定期整理记忆,类似人类睡眠记忆巩固。代码还揭示未发布功能如电子宠物系统,但也暴露权限系统漏洞和代码质量问题。这次泄露展现了AI助手核心技术的复杂性,特别是其记忆系统如何通过透明可编辑的设计建立用户信任。

program哲学 469

C语言设计模式全面解析:从理论到28个实战示例

本文系统介绍了23种经典设计模式在C语言中的实现方法。通过结构体、函数指针等技巧,C语言可以优雅地模拟面向对象特性,实现代码复用与解耦。文章分类详解了创建型、结构型、行为型三大类模式,并提供了28个完整代码示例,包括单例、策略、观察者等核心模式的精简实现。这些模式在嵌入式系统、操作系统内核等场景中广泛应用,如状态机、事件驱动等。学习C语言设计模式的关键在于理解模式意图,掌握函数指针和结构体组合等技巧,并在实际项目中灵活运用。本文为C语言开发者提供了全面的设计模式参考指南。

数字人生 364

Android SD卡路径问题以及如何获取SDCard 内存

在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题。较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用户。讲述的内容如下:

lzhang616的专栏 834

从毫K级温控到分子级洁净:光刻机环境控制系统的技术演进与专利格局

摘要 光刻机环境控制系统是半导体制造中的"隐形精密工程",通过毫K级温度控制(±0.002℃)、超高洁净度(ISO Class 1)等核心技术为纳米级光刻提供环境保障。本文系统分析了温度、湿度、洁净度、流场和压力控制五大技术方向的发展趋势,揭示了从单参数控制向多参数协同智能控制的转型路径。研究显示:1)温度控制正从PID向神经网络智能控制演进;2)EUV光刻将湿度控制推至ppbv级;3)洁净度控制扩展到分子级污染物管理。头部厂商中,ASML侧重系统集成,Nikon专注浸没流场,Canon

huanghm88的专栏 313

android 获取sd卡目录失败_Android SD卡路径问题以及如何获取SDCard 内存

在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题。较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用户。讲述的内容如下:...

weixin_39926402的博客 644

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Java 根据定路径删除文件和文件夹下的所有文件
下一篇: Java 调整JVM内存的大小
onlywaitforyou
博客等级 码龄15年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值