Android 获取系统或SDCARD剩余空间信息(转)

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。

 

Android 获取系统或SDCARD剩余空间信息(转)

时间: 2024-08-29 03:30:22

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

Android获取系统时间方法详解

Android获取系统时间方法的方法有很多种,常用的有Calendar.Date.currentTimeMills等方法. (1)Calendar Calendar获取系统时间首先要用Calendar.getInstance()函数获取一个实例,再为该实例设定时区(中国的时区为GMT+8:00),最后使用Calendar.get()函数获取时间的具体信息,如年,月,日,小时,分,秒,星期几. package com.hzhi.time_example; import java.util.Cale

Android 获取系统相册中的所有图片

Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public static List<String> getSystemPhotoList(Context context) { List<String> result = new ArrayList<String>(); Uri uri = MediaStore.Images.Medi

Android获取系统ID(com.android.internal.R)

R.id.icon 怎么获取,这个东西其实在 com.android.internal.R 这个里面,但是这个类我们访问不到怎么办? 反射呗, Java 的反射可谓是万能啊,啥都可以拿到只要他在. [java] view plaincopy Class<?> clazz = Class.forName("com.android.internal.R$id"); Field field = clazz.getField("icon"); field.set

Android 获取系统的联系人

本文主要介绍android中怎样获取系统的联系人数据 首先打开模拟器 点击联系人图标按钮 说明系统联系人数据库是空的,打开File explorer,找到data/data下面的文件夹: 将contacts2.db文件导出,添加到sqlite中的时候报错: 点击“ok”忽略之 表结构相当的复杂,首先搞清楚其中的三张表 * data表 保存联系人的数据 * raw_contacts表 保存联系人的id contact_id * mimetypes表 保存联系人数据的类型 接下来通过模拟器添加联系人

android获取系统wifi状态等

WIFI 获取WIFI状态 WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); if(wifiManager != null){ int wifiState = wifiManager.getWifiState(); } 附:Wifi状态有以下几种:(括号内为所对应的的int值) 1. wifiManager.WIFI_STATE_DISABLED (1) 2. wifiMa

[android] 获取系统的联系人信息

内容提供是实质上是个接口,后门,他给别人提供数据,系统联系人是个比较复杂的内容通过者. 找到/data/data/com.android.providers.contacts/contacts2.db 这个目录下还有个文件contacts2.db.-journal,这个文件和数据库的事务相关 联系人应用数据库的主要结构 raw_contacts 联系人表 contact_id 联系人id data数据表  raw_contact_id联系人id,mimetype_id数据类id,data1数据

Android 获取系统时间

[java] view plaincopyprint? import    java.text.SimpleDateFormat; SimpleDateFormat    formatter    =   new    SimpleDateFormat    ("yyyy年MM月dd日    HH:mm:ss     "); Date    curDate    =   new    Date(System.currentTimeMillis());//获取当前时间 String  

Android获取系统外置存储卡路径的方法

android系统可通过Environment.getExternalStorageDirectory()获取存储卡的路径,但是现在有很多手机内置有一个存储空间,同时还支持外置sd卡插入,这样通过Environment.getExternalStorageDirectory()方法获取到的就是内置存储卡的位置,需要获取外置存储卡的路径就比较麻烦,这里借鉴网上的代码,稍作修改,在已有的手机上做了测试,效果还可以,当然也许还有其他的一些奇葩机型没有覆盖到. package com.example.g

android 获取系统默认路径

Environment.getDataDirectory().getPath() : /dataEnvironment.getDownloadCacheDirectory().getPath()  : /cacheEnvironment.getExternalStorageDirectory().getPath(): /mnt/sdcardEnvironment.getRootDirectory().getPath()           : /systemContext.getCacheDir