Android 台灣中文網
標題:
獲取Android手機中SD卡存儲訊息
[打印本頁]
作者:
暗桌之光
時間:
2011-7-24 15:30
標題:
獲取Android手機中SD卡存儲訊息
SD卡作為手機的擴展存儲設備,在手機中充當硬盤角色,可以讓我們手機存放更多的數據以及多媒體等大體積文件。因此查看SD卡的記憶體就跟我們查看硬盤的剩餘空間一樣,是我們經常操作的一件事,那麼在Android開發中,我們如何能獲取SD卡的記憶體容量呢?
首先,要獲取SD卡上面的訊息,必須先對SD卡有訪問的權限,因此第一件事就是需要添加訪問擴展設備的權限。
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
複製代碼
其次,需要判斷手機上面SD卡是否插好,如果有SD卡的情況下,我們才可以訪問得到並獲取到它的相關訊息,當然以下這個語句需要用if做判斷。
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
複製代碼
取得sdcard文件路徑
File path = Environment.getExternalStorageDirectory();
StatFs statfs = new StatFs(path.getPath());
複製代碼
獲取block的SIZE
long blocSize = statfs.getBlockSize();
複製代碼
獲取BLOCK數量
long totalBlocks = statfs.getBlockCount();
複製代碼
空閒的Block的數量
long availaBlock = statfs.getAvailableBlocks();
複製代碼
計算總空間大小和空閒的空間大小
儲空間大小跟空閒的存儲空間大小就被計算出來了。
/**
* 取得空閒sd卡空間大小
* @return
*/
public long getAvailaleSize(){
File path = Environment.getExternalStorageDirectory(); //取得sdcard文件路徑
StatFs stat = new StatFs(path.getPath());
/*獲取block的SIZE*/
long blockSize = stat.getBlockSize();
/*空閒的Block的數量*/
long availableBlocks = stat.getAvailableBlocks();
/* 返回bit大小值*/
return availableBlocks * blockSize;
//(availableBlocks * blockSize)/1024 KIB 單位
//(availableBlocks * blockSize)/1024 /1024 MIB單位
}
/**
* SD卡大小
* @return
*/
public long getAllSize(){
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
/*獲取block的SIZE*/
long blockSize = stat.getBlockSize();
/*塊數量*/
long availableBlocks = stat.getBlockCount();
/* 返回bit大小值*/
return availableBlocks * blockSize;
}
複製代碼
Android 文件的瀏覽(類似於FileDialog的功能)
最近因為比較忙,好幾天沒有寫博客了,正好現在正在弄上傳文件,當時想怎麼能實現fileDialog的功能呢,開啟文件,瀏覽文件,然後選擇文件呢,查了好多資料,也看了不少論壇,都說裡面沒有這個功能,那真是奇怪了,裡面沒有這個功能,當然就需要自己動手添加這個功能了。
首先說一下這個文件瀏覽的簡單實現原理:
首先選擇一個目錄做為根目錄,然後開啟此目錄,常用的就是使用File這個類了,如下:
File file=new File(path);
複製代碼
然後可以通過獲取到此目錄下所有文件及文件夾的列表:
如下:
File[] files = file.listFiles();
複製代碼
然後再根據根據得到的文件,來判斷是文件夾還是文件,如果是文件夾,那麼我們就將文件夾添加到列表中,如果是文件那麼就把文件添加到列表中進行顯示,如果需要顯示圖標的話,那麼就需要根據文件的後綴,設定不同的圖標了。我是在ListView中進行顯示的。
基本代碼如下:
for (File currentFile : files)
{
//判斷是一個文件夾還是一個文件
if (currentFile.isDirectory())
{
currentIcon = getResources().getDrawable(R.drawable.folder);
}
else
{
//取得文件名
String fileName = currentFile.getName();
//根據文件名來判斷文件類型,設定不同的圖標
if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage)))
{
currentIcon = getResources().getDrawable(R.drawable.image);
}
else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingWebText)))
{
currentIcon = getResources().getDrawable(R.drawable.webtext);
}
else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingPackage)))
{
currentIcon = getResources().getDrawable(R.drawable.packed);
}
else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio)))
{
currentIcon = getResources().getDrawable(R.drawable.audio);
}
else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo)))
{
currentIcon = getResources().getDrawable(R.drawable.video);
}
else
{
currentIcon = getResources().getDrawable(R.drawable.text);
}
}
複製代碼
下面是根據後綴對文件的類型進行的判斷:
//通過文件名判斷是什麼類型的文件
private boolean checkEndsWithInStringArray(String checkItsEnd,
String[] fileEndings)
{
for(String aEnd : fileEndings)
{
if(checkItsEnd.endsWith(aEnd))
return true;
}
return false;
}
複製代碼
那麼這樣我們就可以顯示出來帶圖標的列表了,現在到了如果開啟子目錄的介紹了,首先對Listview添加點擊事件,在點擊之後,我們根據點擊的內容進行判斷,判斷是文件還是文件夾,如果是文件夾,那麼再次調用顯示,並且將以前顯示的內容清空即可,顯示出來,如果是文件的話,那麼這個根據我們的需要進行操作:如開啟、選擇等等操作了。
上面所寫的就是關於如何自己做一個文件瀏覽器,而且在這裡還可以根據不同的使用地方,讓其顯示特定的文件。這個需要讀者在自己的使用中自己慢慢熟悉與摸索了!
這個Listview也是根據自己的需要進行了佈局,相信通過學習這一篇文章,你肯定會以File及ListView的使用有一個瞭解,也希望做出自己實用的文件瀏覽器
作者:
ERIC2HK2001
時間:
2011-7-26 02:07
作者:
jiaums
時間:
2012-5-27 18:59
好帖!學習了!
歡迎光臨 Android 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1