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

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卡上拍照程序的图片存储路径); //写死绝对路径,不赞成使用

方法二:
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了。
分享到:
评论

相关推荐

    Unity应用获取外置SD卡路径方法

    在Android 6.0(API级别23)及更高版本中,系统对存储访问进行了权限管理,因此获取外置SD卡路径前,需要确保在`AndroidManifest.xml`中添加了相应的权限: ```xml ``` 在Unity中,我们可以使用C#脚本来获取外置...

    android获取SDcard内存空间

    总结一下,本篇内容涵盖了Android获取SD卡内存空间的基本方法,包括获取存储状态、总空间、可用空间和已用空间,以及如何处理不同的Android版本和权限问题。这些知识对于任何涉及存储管理的Android应用都是必不可少...

    Android获取SD卡路径及SDCard内存的方法

    在Android开发中,获取SD卡路径以及查询SDCard内存大小是常见的需求,这对于存储和管理应用程序的数据至关重要。本文将详细讲解如何实现这一功能,并介绍相关的类和方法。 首先,我们来了解一下获取SD卡路径的两种...

    获取SD卡 TF卡 内置 外置存储卡路径例子

    在提供的压缩包文件"获取存储卡路径"中,可能包含了实现上述优化策略的代码示例,如自定义函数来获取不同类型的存储卡路径,或者实现了上述优化技术的文件读取类。通过研究这些代码,开发者可以更好地理解如何在实际...

    android 读取外置SDCard

    首先,获取外置SDCard的路径是进行任何操作的第一步。在Android中,外置SDCard的路径通常是`/storage/emulated/0/`,但这并不是在所有设备上都一致。因此,推荐使用Android提供的API来获取正确的路径。从API level ...

    Android如何获取SDCard_内存

    `Environment`类提供了访问环境变量的功能,特别用于获取有关外部存储设备(如SD卡)的信息。 ##### 1. Environment类的常量 - **MEDIA_BAD_REMOVAL**:表示SD卡在被卸载之前已被移除。 - **MEDIA_CHECKING**:...

    SDCard内存大小统计

    例如,`getExternalStorageDirectory()`可以获取根目录为外部存储卡的路径,而`getExternalStorageState()`则能返回当前外部存储的状态,如"mounted"表示已挂载,可以读写。 统计SDCard的总大小和可用大小,可以...

    Android 通过反射调用获取内置存储和外置sd卡根路径(适用于各个版本)

    外部存储则包括可移除的SD卡以及设备上的共享公共存储空间。在Android 6.0(API级别23)及更高版本,用户需授予应用读写外部存储的权限。 获取内置存储根路径相对简单,因为它通常是系统默认提供的。在API级别17及...

    android往手机内存和sdcard卡上存储数据

    这篇内容将详细讲解如何在手机内存以及SDCard(外部存储)上进行数据存储,并提供了一段经过封装的代码,方便开发者直接应用于实际项目。 首先,我们要了解Android提供的几种数据存储方式。它们包括: 1. **Shared...

    查看手机内存状态和sdcard卡的内存状态

    在Android系统中,了解手机内存状态以及SDCard(外部存储卡)的状态对于开发者和普通用户来说都至关重要。这有助于优化应用程序性能,管理存储空间,确保设备的流畅运行。以下是一些关于查看和理解这些状态的知识点...

    Android 读取SD卡中文件以及内存使用情况

    2. **获取SD卡路径**:Android提供了`Environment.getExternalStorageDirectory()`方法来获取SD卡的根目录。这个返回的`File`对象可以用来创建或操作SD卡上的文件。 3. **列出目录内容**:使用`File`类的方法,如`...

    安卓存储路径获取

    本文将详细讲解如何通过编程的方式在Android设备上获取SD卡路径、自身存储设备路径以及可能存在的USB路径。 首先,Android提供了`StorageManager`类,它是用于管理设备上所有外部存储卷的系统服务。这个类允许我们...

    android gallery 图片轮播 展示SD卡下指定目录的图片 可删除

    glide 和 picasso 是两个常用的选择,它们可以方便地加载、缓存和显示网络以及本地资源(包括SD卡上的图片)。在这个项目中,我们可以选择其中一个来实现图片的加载。 1. **图片加载库**: - Glide:Glide以其...

    android 获取手机外置内存卡

    当前只能用Environment.getExternalStorageDirectory()获取内置的SD卡路径,因为不同机型的系统SD卡的路径不相同,我拿三星s3试试,全是都只找到内置SD卡,后来通过获取系统进程名字找到内存卡路径。

    android显示sdcard上的图片

    `getExternalStorageDirectory()`方法可以获取到外部存储的根目录,通常就是SD卡的路径。在Android 6.0(API level 23)及以上版本,需要在运行时申请`READ_EXTERNAL_STORAGE`权限,否则无法读取SD卡上的文件。 2. ...

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

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

    android手机获取SD卡信息代码

    在Android平台上,获取SD卡(外部存储)信息是开发者经常需要进行的操作,这涉及到对文件系统和设备存储的理解。在Android系统中,SD卡通常被视为外部存储,用于扩展设备的存储空间,允许用户存储多媒体文件、应用...

    基于STM32音乐播放器设计 SD卡文件

    1. **初始化SD卡**:通过STM32的SPI接口初始化SD卡,包括发送命令序列、检测SD卡类型(SDSC、SDHC或SDXC)以及设置工作模式。 2. **挂载文件系统**:使用FatFs库挂载SD卡上的FAT分区,创建一个工作目录,以便后续的...

    sdcard 循环读取数据

    在Android系统中,外部存储设备通常被称为SD卡(尽管现代设备可能使用内置的闪存,但仍然沿用了这个术语)。SD卡是用户存储媒体、应用数据和其他大文件的理想选择,因为它们提供了相对较大的存储空间。当需要从SD卡...

Global site tag (gtag.js) - Google Analytics