昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: 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卡上拍照程序的图片存储路径); //写死绝对路径,不赞成使用
方法二:
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;
}
}
原文:
http://www.ophonesdn.com/forum/thread-2632-3-1.html
最近太能Copy了。
分享到:
相关推荐
在Android 6.0(API级别23)及更高版本中,系统对存储访问进行了权限管理,因此获取外置SD卡路径前,需要确保在`AndroidManifest.xml`中添加了相应的权限: ```xml ``` 在Unity中,我们可以使用C#脚本来获取外置...
总结一下,本篇内容涵盖了Android获取SD卡内存空间的基本方法,包括获取存储状态、总空间、可用空间和已用空间,以及如何处理不同的Android版本和权限问题。这些知识对于任何涉及存储管理的Android应用都是必不可少...
在Android开发中,获取SD卡路径以及查询SDCard内存大小是常见的需求,这对于存储和管理应用程序的数据至关重要。本文将详细讲解如何实现这一功能,并介绍相关的类和方法。 首先,我们来了解一下获取SD卡路径的两种...
在提供的压缩包文件"获取存储卡路径"中,可能包含了实现上述优化策略的代码示例,如自定义函数来获取不同类型的存储卡路径,或者实现了上述优化技术的文件读取类。通过研究这些代码,开发者可以更好地理解如何在实际...
首先,获取外置SDCard的路径是进行任何操作的第一步。在Android中,外置SDCard的路径通常是`/storage/emulated/0/`,但这并不是在所有设备上都一致。因此,推荐使用Android提供的API来获取正确的路径。从API level ...
`Environment`类提供了访问环境变量的功能,特别用于获取有关外部存储设备(如SD卡)的信息。 ##### 1. Environment类的常量 - **MEDIA_BAD_REMOVAL**:表示SD卡在被卸载之前已被移除。 - **MEDIA_CHECKING**:...
例如,`getExternalStorageDirectory()`可以获取根目录为外部存储卡的路径,而`getExternalStorageState()`则能返回当前外部存储的状态,如"mounted"表示已挂载,可以读写。 统计SDCard的总大小和可用大小,可以...
外部存储则包括可移除的SD卡以及设备上的共享公共存储空间。在Android 6.0(API级别23)及更高版本,用户需授予应用读写外部存储的权限。 获取内置存储根路径相对简单,因为它通常是系统默认提供的。在API级别17及...
这篇内容将详细讲解如何在手机内存以及SDCard(外部存储)上进行数据存储,并提供了一段经过封装的代码,方便开发者直接应用于实际项目。 首先,我们要了解Android提供的几种数据存储方式。它们包括: 1. **Shared...
在Android系统中,了解手机内存状态以及SDCard(外部存储卡)的状态对于开发者和普通用户来说都至关重要。这有助于优化应用程序性能,管理存储空间,确保设备的流畅运行。以下是一些关于查看和理解这些状态的知识点...
2. **获取SD卡路径**:Android提供了`Environment.getExternalStorageDirectory()`方法来获取SD卡的根目录。这个返回的`File`对象可以用来创建或操作SD卡上的文件。 3. **列出目录内容**:使用`File`类的方法,如`...
本文将详细讲解如何通过编程的方式在Android设备上获取SD卡路径、自身存储设备路径以及可能存在的USB路径。 首先,Android提供了`StorageManager`类,它是用于管理设备上所有外部存储卷的系统服务。这个类允许我们...
glide 和 picasso 是两个常用的选择,它们可以方便地加载、缓存和显示网络以及本地资源(包括SD卡上的图片)。在这个项目中,我们可以选择其中一个来实现图片的加载。 1. **图片加载库**: - Glide:Glide以其...
当前只能用Environment.getExternalStorageDirectory()获取内置的SD卡路径,因为不同机型的系统SD卡的路径不相同,我拿三星s3试试,全是都只找到内置SD卡,后来通过获取系统进程名字找到内存卡路径。
`getExternalStorageDirectory()`方法可以获取到外部存储的根目录,通常就是SD卡的路径。在Android 6.0(API level 23)及以上版本,需要在运行时申请`READ_EXTERNAL_STORAGE`权限,否则无法读取SD卡上的文件。 2. ...
本文将详细解析如何通过编写工具类来获取SD卡(外部存储)和手机内存(内部存储)的大小信息。我们将分析提供的`SDCardUtil`类,并解释其中的关键代码和相关API。 首先,`SDCardUtil`类包含两个静态方法:`...
在Android平台上,获取SD卡(外部存储)信息是开发者经常需要进行的操作,这涉及到对文件系统和设备存储的理解。在Android系统中,SD卡通常被视为外部存储,用于扩展设备的存储空间,允许用户存储多媒体文件、应用...
1. **初始化SD卡**:通过STM32的SPI接口初始化SD卡,包括发送命令序列、检测SD卡类型(SDSC、SDHC或SDXC)以及设置工作模式。 2. **挂载文件系统**:使用FatFs库挂载SD卡上的FAT分区,创建一个工作目录,以便后续的...
在Android系统中,外部存储设备通常被称为SD卡(尽管现代设备可能使用内置的闪存,但仍然沿用了这个术语)。SD卡是用户存储媒体、应用数据和其他大文件的理想选择,因为它们提供了相对较大的存储空间。当需要从SD卡...