1.获取可用的内存
public String getFreeMemory(){
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
return Formatter.formatFileSize(context, mi.availMem);
}
没有直接的API,但是可以读取配置文件,配置文件为/proc/meminfo,权限为可读。配置文件内容格式如下:
MemTotal: 1665632 kB
MemFree: 85140 kB
Buffers: 48808 kB
Cached: 501392 kB
SwapCached: 0 kB
Active: 937580 kB
Inactive: 244956 kB
Active(anon): 636044 kB
Inactive(anon): 596 kB
Active(file): 301536 kB
Inactive(file): 244360 kB
Unevictable: 3616 kB
Mlocked: 0 kB
HighTotal: 1309696 kB
HighFree: 14896 kB
LowTotal: 355936 kB
LowFree: 70244 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 636008 kB
Mapped: 111488 kB
Shmem: 680 kB
Slab: 36564 kB
SReclaimable: 20836 kB
SUnreclaim: 15728 kB
KernelStack: 14048 kB
PageTables: 17800 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 832816 kB
Committed_AS: 11299500 kB
VmallocTotal: 122880 kB
VmallocUsed: 76444 kB
VmallocChunk: 11140 kB
很明显是键值对属性,故而:
public String getTotalMemory() throws FileNotFoundException, IOException{
Properties pp = new Properties();
pp.load(new FileInputStream("/proc/meminfo"));
return pp.getProperty("MemTotal");
}
3.获取sd卡的大小与剩余空间
public String getSdTotalSize(Context context){
StatFs sf = new StatFs("/mnt/sdcard");
long blockSize = sf.getBlockSize();
long totalBlocks = sf.getBlockCount();
return Formatter.formatFileSize(context, blockSize*totalBlocks);
}
public String getSdAvailableSize(Context context){
StatFs sf = new StatFs("/mnt/sdcard");
long blockSize = sf.getBlockSize();
long availableBlocks = sf.getAvailableBlocks();
return Formatter.formatFileSize(context, blockSize*availableBlocks);
}
4.获取内部存储空间
public String getDataTotalSize(Context context){
StatFs sf = new StatFs(context.getCacheDir().getAbsolutePath());
long blockSize = sf.getBlockSize();
long totalBlocks = sf.getBlockCount();
return Formatter.formatFileSize(context, blockSize*totalBlocks);
}