android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等。
      看下读取sd卡的:
Java代码

  1. void readSDCard() {
  2. String state = Environment.getExternalStorageState();
  3. if(Environment.MEDIA_MOUNTED.equals(state)) {
  4. File sdcardDir = Environment.getExternalStorageDirectory();
  5. StatFs sf = new StatFs(sdcardDir.getPath());
  6. long blockSize = sf.getBlockSize();
  7. long blockCount = sf.getBlockCount();
  8. long availCount = sf.getAvailableBlocks();
  9. Log.d("", "block大小:"+ blockSize+",block数目:"+ blockCount+",总大小:"+blockSize*blockCount/1024+"KB");
  10. Log.d("", "可用的block数目::"+ availCount+",剩余空间:"+ availCount*blockSize/1024+"KB");
  11. }
  12. }

然后看下读取系统内部空间的:
Java代码

  1. void readSystem() {
  2. File root = Environment.getRootDirectory();
  3. StatFs sf = new StatFs(root.getPath());
  4. long blockSize = sf.getBlockSize();
  5. long blockCount = sf.getBlockCount();
  6. long availCount = sf.getAvailableBlocks();
  7. Log.d("", "block大小:"+ blockSize+",block数目:"+ blockCount+",总大小:"+blockSize*blockCount/1024+"KB");
  8. Log.d("", "可用的block数目::"+ availCount+",可用大小:"+ availCount*blockSize/1024+"KB");
  9. }

StatFs获取的都是以block为单位的,这里我解释一下block的概念:
1.硬件上的 block size, 应该是"sector size",linux的扇区大小是512byte
2.有文件系统的分区的block size, 是"block size",大小不一,可以用工具查看
3.没有文件系统的分区的block size,也叫“block size”,大小指的是1024 byte
4.Kernel buffer cache 的block size, 就是"block size",大部分PC是1024
5.磁盘分区的"cylinder size",用fdisk 可以查看。
      我们这里的block size是第二种情况,一般SD卡都是fat32的文件系统,block size是4096.
      这样就可以知道手机的内部存储空间和sd卡存储空间的总大小和可用大小了。

如果S

  1. public class SDCardSizeUtil {
  2. public static boolean isAvaiableSpace(int sizeMb) {
  3. boolean ishasSpace = false;
  4. if (android.os.Environment.getExternalStorageState().equals(
  5. android.os.Environment.MEDIA_MOUNTED)) {
  6. String sdcard = Environment.getExternalStorageDirectory().getPath();
  7. StatFs statFs = new StatFs(sdcard);
  8. long blockSize = statFs.getBlockSize();
  9. long blocks = statFs.getAvailableBlocks();
  10. long availableSpare = (blocks * blockSize) / (1024 * 1024);
  11. Log.d("剩余空间", "availableSpare = " + availableSpare);
  12. if (availableSpare > sizeMb) {
  13. ishasSpace = true;
  14. }
  15. }
  16. return ishasSpace;
  17. }
  18. }

D卡的剩余空间小于某个值返回false,如果有足够的空间,则返回true。

  1.  

Android 获取系统或SDCARD剩余空间信息(转)的更多相关文章

  1. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  2. Android获取系统时间方法的总结

    Android获取系统时间方法的方法有很多种,常用的有Calendar.Date.currentTimeMills等方法. (1)Calendar Calendar获取系统时间首先要用Calendar ...

  3. Android 获取系统时间和网络时间

    有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差. 直接上代码. 1.清单文件中网络添加权限. <!-- 访问Internet资 ...

  4. android 获取系统联系人 完全解析

    一.代码 1.ContactsEngine.java import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...

  5. Android 获取系统的联系人

    本文主要介绍android中怎样获取系统的联系人数据 首先打开模拟器 点击联系人图标按钮 说明系统联系人数据库是空的,打开File explorer,找到data/data下面的文件夹: 将conta ...

  6. android获取系统通讯录

    package com.example.administrator.yunphone.View; import android.app.Fragment; import android.databas ...

  7. Android 获取系统短信内容

    //这里通过内容提供者获取系统短信内容 Uri uri = Uri.parse("content://sms/"); String[] projection = {"_i ...

  8. Android 获取系统图库和相机照片 裁剪并显示

    接上一篇 package com.example.image; import android.app.Activity; import android.content.Intent; import a ...

  9. android 获取系统硬件信息

    一,首先设置权限访问: <uses-permission android:name="android.permission.READ_PHONE_STATE" />  ...

随机推荐

  1. OpenGrok的安装

    http://opengrok.github.io/OpenGrok/ Ubuntu环境下OpenGrok的安装及使用 http://www.linuxidc.com/Linux/2013-05/84 ...

  2. QLineEdit

    The QLineEdit widget is a one-line text editor. Header: #include <QLineEdit> qmake: QT += widg ...

  3. bzoj3637: Query on a tree VI

    Description You are given a tree (an acyclic undirected connected graph) with n nodes. The tree node ...

  4. Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三)

    Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及P ...

  5. Catharanthus roseus(长春花碱)的生物合成

    标题:Directed Biosynthesis of Alkaloid Analogs in the Medicinal Plant Catharanthus roseus 作者:Elizabeth ...

  6. MFC之MessageBox用法

    一    函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口 ...

  7. 使用 getNextException() 来检索已经过批处理的特定元素的异常。 ERRORCODE=-4228, SQLSTATE=null

    今天查询了一天发现的问题,用ibatis做批量操作时,报错: [非原子批处理出现故障]使用 getNextException() 来检索已经过批处理的特定元素的异常. ERRORCODE=-4228, ...

  8. 【木德木作杯楼市达人秀NO.28】南湖买房故事

    应得意版主的邀请,我也来写写我的买房故事,虽然过程没有别人那么惊心动魄,但是毕竟是自己人生中非常重要的一件事情,就像恋爱一样,情话永远没有情书好,我也借此纪念一下这段短暂的时光.其中会涉及到本人对一些 ...

  9. Qt学习 之 Socket通信(世界上最简单的例子了)

    最近写大作业用到Qt的Socket部分,网上关于这部分的资料都太过复杂,现在总结一下一些简单的应用.有机会可以给大家讲讲用Socket传送文件的代码. 这里主要讲解如何实现TCP和UDP的简单通信. ...

  10. HTML入门教程(全套)

    http://www.rm5u.com/html_html.html http://learn.shayhowe.com/  moe.mwulu.com  http://www.w3school.co ...