馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
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的使用有一個瞭解,也希望做出自己實用的文件瀏覽器 |