首页 > 技术文章 > 获取Android手机中SD卡存储容量 获取剩余空间

zhoujian315 2013-09-06 10:33 原文

SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,

是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢?

要操作Sdcard首先要获得访问Sdcard的权限,因此在AndroidManifes.xml中添加权限

 

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

 其次,要判断Sdcard是否存在,存在Sdcard的情况我们才能访问,因此这里要用if判断

//得到外部储存sdcard的状态
	private String sdcard=Environment.getExternalStorageState();
	//外部储存sdcard存在的情况
	private String state=Environment.MEDIA_MOUNTED;

 获取Sdcard的路径

//获得路径
		File file=Environment.getExternalStorageDirectory();
		 statFs=new StatFs(file.getPath());

 获得Sdcard总容量,我这里封装成了一个方法

/**
     * SDCard 总容量大小 
     * @return MB
     */
    private long getTotalSize()
    {
        if(sdcard.equals(state))
        {
            //获得sdcard上 block的总数
            long blockCount=statFs.getBlockCount();
            //获得sdcard上每个block 的大小
            long blockSize=statFs.getBlockSize();
            //计算标准大小使用:1024,当然使用1000也可以
            long bookTotalSize=blockCount*blockSize/1000/1000;
            return bookTotalSize;
            
        }else
        {
            return -1;
        }
        
    }

Sdcard的剩余大小,这里也封装成了一个方法

/**
     * 计算Sdcard的剩余大小
     * @return MB
     */
    private long getAvailableSize()
    {
        if(sdcard.equals(state))
        {
            //获得Sdcard上每个block的size
            long blockSize=statFs.getBlockSize();
            //获取可供程序使用的Block数量
            long blockavailable=statFs.getAvailableBlocks();
            //计算标准大小使用:1024,当然使用1000也可以
            long blockavailableTotal=blockSize*blockavailable/1000/1000;
            return blockavailableTotal;
        }else
        {
            return -1;
        }
    }

 

有些应用能安装到SD卡上,有些不能,这其中有一定规则。如何判断?

       Google 默认 PackageManager 管理安装包的机制如下:在 AdroidManifest.xml 里面定义安装位置可以有四种情况:
1. 如果没有定义安装位置,表示安装在手机内存上;
2. android:installLocation = "auto",表示先查看手机内存是否足够,如果够就安装在手机内存上,不够就安装在 T 卡上;
3. android:installLocation = "internalOnly",表示安装在手机内存上;
4. android:installLocation = "preferExternal" ,表示安装在 T 卡上;

        如果 apk 的 AndroidManifest.xml 里面定义 android:installLocation = "internalOnly",那么无论用户选择安装在什么地方,该apk 都会安装到手机上,这样做的好处是避免程序运行错误,因为定义android:installLocation = "internalOnly" 的 apk 一般要安装到手机内存上才能正常运行。

推荐阅读