SD卡作為手機的擴展存儲設備,在手機中充當硬盤角色,可以讓我們手機存放更多的數據以及多媒體等大體積文件。因此查看SD卡的內存就跟我們查看硬盤的剩余空間一樣,
是我們經常操作的一件事,那么在Android開發中,我們如何能獲取SD卡的內存容量呢?
要操作Sdcard首先要獲得訪問Sdcard的權限,因此在AndroidManifes.xml中添加權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
其次,要判斷Sdcard是否存在,存在Sdcard的情況我們才能訪問,因此這里要用if判斷
//得到外部儲存sdcard的狀態 private String sdcard=Environment.getExternalStorageState(); //外部儲存sdcard存在的情況 private String state=Environment.MEDIA_MOUNTED;
獲取Sdcard的路徑
//獲得路徑 File file=Environment.getExternalStorageDirectory(); statFs=new StatFs(file.getPath());
獲得Sdcard總容量,我這里封裝成了一個方法
/** * SDCard 總容量大小 * @return MB */ private long getTotalSize() { if(sdcard.equals(state)) { //獲得sdcard上 block的總數 long blockCount=statFs.getBlockCount(); //獲得sdcard上每個block 的大小 long blockSize=statFs.getBlockSize(); //計算標准大小使用:1024,當然使用1000也可以 long bookTotalSize=blockCount*blockSize/1000/1000; return bookTotalSize; }else { return -1; } }
Sdcard的剩余大小,這里也封裝成了一個方法
/** * 計算Sdcard的剩余大小 * @return MB */ private long getAvailableSize() { if(sdcard.equals(state)) { //獲得Sdcard上每個block的size long blockSize=statFs.getBlockSize(); //獲取可供程序使用的Block數量 long blockavailable=statFs.getAvailableBlocks(); //計算標准大小使用:1024,當然使用1000也可以 long blockavailableTotal=blockSize*blockavailable/1000/1000; return blockavailableTotal; }else { return -1; } }
有些應用能安裝到SD卡上,有些不能,這其中有一定規則。如何判斷?
Google 默認 PackageManager 管理安裝包的機制如下:在 AdroidManifest.xml 里面定義安裝位置可以有四種情況:
1. 如果沒有定義安裝位置,表示安裝在手機內存上;
2. android:installLocation = "auto",表示先查看手機內存是否足夠,如果夠就安裝在手機內存上,不夠就安裝在 T 卡上;
3. android:installLocation = "internalOnly",表示安裝在手機內存上;
4. android:installLocation = "preferExternal" ,表示安裝在 T 卡上;
如果 apk 的 AndroidManifest.xml 里面定義 android:installLocation = "internalOnly",那么無論用戶選擇安裝在什么地方,該apk 都會安裝到手機上,這樣做的好處是避免程序運行錯誤,因為定義android:installLocation = "internalOnly" 的 apk 一般要安裝到手機內存上才能正常運行。