`
h416756139
  • 浏览: 365755 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解析如何获取SDCard 内存

阅读更多

 

继上篇音乐播放器,我们讲到使用 SDCard 播放音乐的例子,上篇也将如何在 Android 模拟器中创建 SDCard 的步骤列了出来。本篇将扩展上篇例子,去获取SDCard 的所存内存,显示出来告诉用户。本篇讲述的内容如下:

  • 1、讲述 Environment 类。
  • 2、讲述 StatFs 类。
  • 3、完整例子读取 SDCard 内存

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 常用方法:

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

 

TIP:要判断手机是否安装了存储卡,可通过 Environment.getExternalStorageState()方法来判断存储卡的状态。

如果你不知道如何创建 SDCard 你可回头看我上篇文章:点击这里

实例运行效果如图

上篇放了两首歌和一个30多M的音频文件,之前创建时给的500MB空间,现在剩下的刚好。

 

转自:http://www.cnblogs.com/TerryBlog/archive/2010/06/27/1766363.html

 

 

分享到:
评论

相关推荐

    Android解析如何获取SDCard 内存项目源代码

    标题提到的"Android解析如何获取SDCard内存项目源代码"显然是一个示例项目,提供了实现这一功能的源代码。下面将详细解释这个过程涉及的知识点。 1. **Android存储体系**: Android设备有两种主要的存储类型:内部...

    Android 解析如何检测获取SDCard内存剩余空间.rar

    Android 解析如何检测获取SDCard内存剩余空间,用到了Environment 类、StatFs 类。SDCard存储卡在 Android 手机上是可以随时插拔的,每次的动作都会引起Android系统ACTION_BROADCAST,本例子将计算出 SDCard 的剩余...

    SDcard数据访问SAX解析XML文件

    对于大型XML文件,SAX解析器的性能优势明显,因为它不会一次性加载整个文件到内存中。通过事件驱动的方式,我们可以高效地处理XML内容,同时在SD卡上进行数据存取,充分利用Android设备的存储空间。 在实际项目中,...

    Android开发实现的获取sdcard大小及内存大小工具类

    本文将详细解析如何通过编写工具类来获取SD卡(外部存储)和手机内存(内部存储)的大小信息。我们将分析提供的`SDCardUtil`类,并解释其中的关键代码和相关API。 首先,`SDCardUtil`类包含两个静态方法:`...

    android显示sdcard上的图片

    综上所述,"android显示sdcard上的图片"这一主题涵盖了Android系统中的文件访问、图片解析、内存管理、UI显示、异步处理等多个技术环节。通过熟练掌握这些知识点,开发者可以构建出高效且用户友好的图片显示功能。在...

    android图片缓存优化,内存缓存加sdcard缓存,性能很好,防止oom

    本文将深入探讨Android图片缓存的优化策略,包括内存缓存和SDCard缓存,并以此为例详细解析`ImagesCache`这个项目。 内存缓存: 内存缓存是为了快速访问图片而设计的,它将图片数据存储在应用程序的内存中。当用户...

    Android读取assets与sdcard中的ini文件与图片

    3. **优化内存**:注意管理好`Bitmap`对象,避免内存泄漏,可以使用`Bitmap.recycle()`回收资源。 总结,Android应用可以通过原生API轻松地读取assets和sdcard中的ini文件,以及处理图像资源。理解这些基本操作对于...

    扫描sdcard卡文本文件

    6. **文本处理库**:对于复杂的文本处理任务,如解析特定格式的文件(如CSV或JSON),可以使用第三方库,如Gson、Jackson或OpenCSV。 7. **性能优化**:在大量文件操作时,注意使用高效的算法,避免一次性加载所有...

    Log输出到sdcard

    1. 获取SD卡路径:在Android中,我们可以通过`Environment.getExternalStorageDirectory()`方法获取SD卡的根目录。确保在AndroidManifest.xml中添加了写外部存储的权限`...

    android从SDcard中读取文件信息

    在SD卡上读取文件通常使用`Environment.getExternalStorageDirectory()`获取根目录,然后根据需要构建子目录路径。例如,读取图片文件: ```java String filePath = Environment.getExternalStorageDirectory() + ...

    STM32奋斗板-SDCard-SDIO-FATFS-MP3-V2

    这些库可以解析MP3文件并将其转换为PCM(脉冲编码调制)数据,STM32再将PCM数据发送给音频功放,通过耳机插座输出声音。解码过程中,STM32需要有足够的计算能力和内存资源来处理复杂的解码算法。 为了实现上电后...

    内存卡修改

    下面将详细解析标题、描述以及部分文本中的关键知识点。 ### 内存卡修改概述 #### 一、内存卡修改背景 在某些情况下,用户可能会遇到内存卡读写速度慢、空间分配不合理等问题,这时就需要对内存卡进行相应的修改以...

    s3c6410_sdcard_bare_code

    《S3C6410 SD卡驱动与裸代码解析》 在嵌入式系统开发领域,S3C6410是一款广泛应用的处理器,它以其高性能和低功耗特性,广泛应用于移动设备和嵌入式设备。在该处理器平台上,SD卡(Secure Digital Card)作为常见的...

    Android编程创建与解析xml的常用方法详解

    **DOM解析**(Document Object Model)是一种将整个XML文档加载到内存中并创建一个树形结构的解析方式,方便遍历和操作整个文档。以下是一个使用DOM解析XML的示例: ```java // DOM解析XML public String ...

    DE0_NIOS_SDCARD

    - **配置文件**:包括Nios II处理器的中断控制器配置、内存映射等设置。 - **编译和烧录工具链**:如Quartus II或Intel FPGA SDK for OpenCL,用于编译和下载代码到FPGA。 5. **开发流程** 开发过程一般包括: ...

    gps.zip_2148 IAP_LPC_gps 2148_lpc 2148 sdcard_usb

    标题中的“gps.zip_2148 IAP_LPC...开发者可以利用其中的链接脚本来优化内存使用,利用GPS程序来获取和处理位置信息,并通过USB接口与外部设备交换数据。这种系统在移动设备、跟踪装置、智能交通系统等领域有广泛应用。

    android中XML的创建与解析

    DOM解析器将整个XML文档加载到内存中,形成一棵树形结构,可以方便地遍历和修改。而SAX是一种事件驱动的解析方式,逐行处理XML,适用于处理大型文件。XmlPullParser是基于拉模式的解析器,更高效且内存占用较低,...

    android中xml的创建以及一些解析xml的常用方法.doc

    1. DOM解析:DOM解析器将整个XML文件加载到内存中,形成一棵DOM树。这使得我们可以对XML进行随机访问,但同时也会消耗大量内存。以下是一个使用DOM解析XML的基本流程: ```java DocumentBuilderFactory factory = ...

    Day14_Android_Xml解析.docx

    - **res/xml**:用于存放应用的资源文件,可以直接通过`getXml(int id)`获取解析器对象。 - **res/raw**:存放未经编译的文件,可通过`openRawResource(int id)`获取输入流。 - **SDcard或应用data目录**:这些...

    android读取内存卡文件方法

    以下是对如何在Android中读取内存卡文件的详细解析,包括代码示例、原理说明以及注意事项。 ### 知识点一:理解ContentResolver与ContentProvider 在Android中,为了确保应用之间的数据隔离和安全,系统采用了一套...

Global site tag (gtag.js) - Google Analytics