小小白一个,只做最简单的陈述
测试功能:通过statFs获取手机内存、SD卡内存大小,通过SimpleArray显示到界面
1)手机空间大小是通过 blockSize * blockCount 得到的
blockSize : 指的是一般存储的最小单位,一般为4kb (任意一个文件都是它的整数倍
blockCount : 手机上储存的最小单位的个数
2) 得到所需空间的路径path,
然后建立tatFs stat = new StatFs(path.getPath());
通过statFs得到所需要的block 和 blockSize
3) 通过ListView 的 simpleArray方法展示出来.
UI界面:
//activity_main.xml 文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</RelativeLayout>
//listview_item.xml文件
</pre><pre name="code" class="html"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv_confirm_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_show_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_confirm_one"
android:text="2" />
</TableRow>
</RelativeLayout>
工具类.java文件:
//SDcardInfos.java 和 PhoneInfos.java
package com.yline.statfs.service;
import java.io.File;
import android.os.Environment;
import android.os.StatFs;
public class SDcardInfos {
/**
* @return 手机SD卡的总空间大小
*/
static public float getTotalExternalMemorySize(){
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
float totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
/**
*
* @return 手机SD卡的可用空间大小
*/
static public float getAvailableExternalMemorySize(){
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
float availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
}
</pre><pre name="code" class="html"><pre name="code" class="html">package com.yline.statfs.service;
import java.io.File;
import android.os.Environment;
import android.os.StatFs;
public class PhoneInfos {
/**
* @return 手机内存的总空间大小
*/
static public float getTotalInternalMemorySize(){
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
float totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
/**
*
* @return 手机内存的可用空间大小
*/
static public float getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
float availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
}
主函数.java文件:
package com.yline.statfs;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.text.format.Formatter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.yline.statfs.service.PhoneInfos;
import com.yline.statfs.service.SDcardInfos;
public class MainActivity extends Activity {
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
getMemorySize();
}
public void getMemorySize(){
String[] s1;
float[] l;
float phoneMemorySize = PhoneInfos.getTotalInternalMemorySize() / (1024 * 1024) / 1024;// 手机总空间
float phoneUseMemorySize = PhoneInfos.getAvailableInternalMemorySize() / (1024 * 1024) / 1024;// 手机可用空间大小
//也可以使用此方法: String availStr = Formatter.formatShortFileSize(this,availSize);
float usedSize = phoneMemorySize - phoneUseMemorySize;// 手机已用空间大小
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
s1 = new String[] { "手机总空间: ", "手机可用空间 ", "手机已用空间 ",
"SD卡总空间: ","SD卡可用空间 ", "SD卡已用空间 " };
// 存在SDcard
float SDmemorySize = SDcardInfos.getTotalExternalMemorySize() / (1024 * 1024) / 1024;// sd卡总空间
float SDUseSize = SDcardInfos.getAvailableExternalMemorySize() / (1024 * 1024) / 1024;// sd卡 可用空间
float SDUsed = SDmemorySize - SDUseSize;
l = new float[] { phoneMemorySize, phoneUseMemorySize, usedSize,
SDmemorySize, SDUseSize, SDUsed };
} else {
// 不存在SDcard
l = new float[] { phoneMemorySize, phoneUseMemorySize, usedSize };
s1 = new String[] { "手机总空间: ", "手机可用空间 ", "手机已用空间 " };
}
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < s1.length; i++) {
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("name", s1[i]);
item.put("size", l[i] + " G");
data.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.listview_item,
new String[] { "name", "size" },
new int[] { R.id.tv_confirm_one, R.id.tv_show_one });
lv.setAdapter(adapter);
l = null;
s1 = null;
}
}
权限:
不需要添加权限
statFs代码链接:(可直接运行)
http://pan.baidu.com/s/1jG644HS
借鉴资源来源:
http://blog.csdn.net/sky181772733/article/details/6922616