Android 台灣中文網

標題: 獲取Android手機中SD卡存儲訊息 [打印本頁]

作者: 暗桌之光    時間: 2011-7-24 15:30
標題: 獲取Android手機中SD卡存儲訊息
SD卡作為手機的擴展存儲設備,在手機中充當硬盤角色,可以讓我們手機存放更多的數據以及多媒體等大體積文件。因此查看SD卡的記憶體就跟我們查看硬盤的剩餘空間一樣,是我們經常操作的一件事,那麼在Android開發中,我們如何能獲取SD卡的記憶體容量呢?

首先,要獲取SD卡上面的訊息,必須先對SD卡有訪問的權限,因此第一件事就是需要添加訪問擴展設備的權限。
  1. <uses-permission
  2. android:name="android.permission.WRITE_EXTERNAL_STORAGE">
  3. </uses-permission>
複製代碼
其次,需要判斷手機上面SD卡是否插好,如果有SD卡的情況下,我們才可以訪問得到並獲取到它的相關訊息,當然以下這個語句需要用if做判斷。
  1. Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
複製代碼
取得sdcard文件路徑
  1. File path = Environment.getExternalStorageDirectory();
  2. StatFs statfs = new StatFs(path.getPath());
複製代碼
獲取block的SIZE
  1. long blocSize = statfs.getBlockSize();
複製代碼
獲取BLOCK數量
  1. long totalBlocks = statfs.getBlockCount();
複製代碼
空閒的Block的數量
  1. long availaBlock = statfs.getAvailableBlocks();
複製代碼
計算總空間大小和空閒的空間大小

儲空間大小跟空閒的存儲空間大小就被計算出來了。
  1. /**

  2. * 取得空閒sd卡空間大小

  3. * @return

  4. */

  5. public long getAvailaleSize(){

  6. File path = Environment.getExternalStorageDirectory(); //取得sdcard文件路徑

  7. StatFs stat = new StatFs(path.getPath());

  8. /*獲取block的SIZE*/

  9. long blockSize = stat.getBlockSize();

  10. /*空閒的Block的數量*/

  11. long availableBlocks = stat.getAvailableBlocks();

  12. /* 返回bit大小值*/

  13. return availableBlocks * blockSize;

  14. //(availableBlocks * blockSize)/1024      KIB 單位

  15. //(availableBlocks * blockSize)/1024 /1024  MIB單位



  16. }



  17. /**

  18. * SD卡大小

  19. * @return

  20. */

  21. public long getAllSize(){

  22. File path = Environment.getExternalStorageDirectory();

  23. StatFs stat = new StatFs(path.getPath());

  24. /*獲取block的SIZE*/

  25. long blockSize = stat.getBlockSize();

  26. /*塊數量*/

  27. long availableBlocks = stat.getBlockCount();

  28. /* 返回bit大小值*/

  29. return availableBlocks * blockSize;

  30. }
複製代碼
Android 文件的瀏覽(類似於FileDialog的功能)

最近因為比較忙,好幾天沒有寫博客了,正好現在正在弄上傳文件,當時想怎麼能實現fileDialog的功能呢,開啟文件,瀏覽文件,然後選擇文件呢,查了好多資料,也看了不少論壇,都說裡面沒有這個功能,那真是奇怪了,裡面沒有這個功能,當然就需要自己動手添加這個功能了。
首先說一下這個文件瀏覽的簡單實現原理:
首先選擇一個目錄做為根目錄,然後開啟此目錄,常用的就是使用File這個類了,如下:
  1. File file=new File(path);
複製代碼
然後可以通過獲取到此目錄下所有文件及文件夾的列表:
如下:
  1. File[]  files = file.listFiles();
複製代碼
然後再根據根據得到的文件,來判斷是文件夾還是文件,如果是文件夾,那麼我們就將文件夾添加到列表中,如果是文件那麼就把文件添加到列表中進行顯示,如果需要顯示圖標的話,那麼就需要根據文件的後綴,設定不同的圖標了。我是在ListView中進行顯示的。
基本代碼如下:
  1. for (File currentFile : files)
  2. {
  3. //判斷是一個文件夾還是一個文件
  4. if (currentFile.isDirectory())
  5. {
  6. currentIcon = getResources().getDrawable(R.drawable.folder);
  7. }
  8. else
  9. {
  10. //取得文件名
  11. String fileName = currentFile.getName();
  12. //根據文件名來判斷文件類型,設定不同的圖標
  13. if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage)))
  14. {
  15. currentIcon = getResources().getDrawable(R.drawable.image);
  16. }
  17. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingWebText)))
  18. {
  19. currentIcon = getResources().getDrawable(R.drawable.webtext);
  20. }
  21. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingPackage)))
  22. {
  23. currentIcon = getResources().getDrawable(R.drawable.packed);
  24. }
  25. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio)))
  26. {
  27. currentIcon = getResources().getDrawable(R.drawable.audio);
  28. }
  29. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo)))
  30. {
  31. currentIcon = getResources().getDrawable(R.drawable.video);
  32. }
  33. else
  34. {
  35. currentIcon = getResources().getDrawable(R.drawable.text);
  36. }
  37. }
複製代碼
下面是根據後綴對文件的類型進行的判斷:
  1. //通過文件名判斷是什麼類型的文件
  2. private boolean checkEndsWithInStringArray(String checkItsEnd,
  3. String[] fileEndings)
  4. {
  5. for(String aEnd : fileEndings)
  6. {
  7. if(checkItsEnd.endsWith(aEnd))
  8. return true;
  9. }
  10. return false;
  11. }
複製代碼
那麼這樣我們就可以顯示出來帶圖標的列表了,現在到了如果開啟子目錄的介紹了,首先對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