Android獲取內(nèi)外置存儲卡的方法
以前的Android(4.1之前的版本)中,SDcard跟路徑通過“/sdcard”或者“/mnt/sdcard”來表示存儲卡,而在Jelly Bean系統(tǒng)中修改為了“/storage/sdcard0”,以后可能還會有多個SDcard的情況。
目前為了保持和之前代碼的兼容,sdcard路徑做了link映射。
為了使您的代碼更加健壯并且能夠兼容以后的Android版本和新的設(shè)備,請通過Environment.getExternalStorageDirectory().getPath()來獲取sdcard路徑,如果您需要往sdcard中保存特定類型的內(nèi)容,可以考慮使用Environment.getExternalStoragePublicDirectory(String type)函數(shù),該函數(shù)可以返回特定類型的目錄,目前支持如下類型:
DIRECTORY_ALARMS //警報的鈴聲 DIRECTORY_DCIM //相機拍攝的圖片和視頻保存的位置 DIRECTORY_DOWNLOADS //下載文件保存的位置 DIRECTORY_MOVIES //電影保存的位置, 比如 通過google play下載的電影 DIRECTORY_MUSIC //音樂保存的位置 DIRECTORY_NOTIFICATIONS //通知音保存的位置 DIRECTORY_PICTURES //下載的圖片保存的位置 DIRECTORY_PODCASTS //用于保存podcast(博客)的音頻文件 DIRECTORY_RINGTONES //保存鈴聲的位置
如果您的應(yīng)用需要下載以上類型的文件,則可以放到上面對應(yīng)的目錄中去來幫助用戶查找,比如最常用的就是下載文件了。如果您開發(fā)了一個瀏覽器,在下載文件的時候把文件下載到Download目錄則方便用戶以后查找該文件,當(dāng)然如果你希望用戶需要通過啟動您的程序來查看他們下載的文件,您也可以不這么做 ^_^。
在使用這些目錄保存文件的時候,需要注意一點:其他程序也有可能在使用這些目錄,在保存文件前,注意判斷下文件是否已經(jīng)存在,不要覆蓋了用戶之前的數(shù)據(jù)。
Android4.1之后Android增加了多存儲卡的支持,一般手機會存在內(nèi)置存儲卡和外置存儲卡,也可能有多個外置存儲卡。如何獲取存儲卡路徑呢?
特別是各種android設(shè)備的存儲器路徑,是不一樣的,比如T卡路徑,可能是/mnt/sdcard、/mnt/extsd、/mnt/external_sd 或者/mnt/sdcard2。有時內(nèi)置存儲器的路徑也可能是/mnt/sdcard,而host usb存儲器的路徑也是各種各樣的。
下面方法是通過反射,調(diào)用StorageManager的隱藏接口getVolumePaths(),實現(xiàn)獲取存儲器列表。
package ckl.storage.list;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.app.Activity;
import android.os.storage.StorageManager;
public class StorageList {
private Activity mActivity;
private StorageManager mStorageManager;
private Method mMethodGetPaths;
public StorageList(Activity activity) {
mActivity = activity;
if (mActivity != null) {
mStorageManager = (StorageManager)mActivity
.getSystemService(Activity.STORAGE_SERVICE);
try {
mMethodGetPaths = mStorageManager.getClass()
.getMethod("getVolumePaths");
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public String[] getVolumePaths() {
String[] paths = null;
try {
paths = (String[]) mMethodGetPaths.invoke(mStorageManager);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return paths;
}
}
在android2.3中,判斷內(nèi)置SD卡是否掛載:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//為true的話,內(nèi)置sd卡存在
}
判斷外置SD卡是否掛載:
if(Environment.getStorageState(Environment.STORAGE_PATH_SD2).equals(Environment.MEDIA_MOUNTED))
{
//為true的話,外置sd卡存在
}
順帶描述怎么取得sdcard的空間大?。?/p>
File sdcardDir = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(sdcardDir.getPath()); //sdcardDir.getPath())值為/mnt/sdcard,想取外置sd卡大小的話,直接代入/mnt/sdcard2 long blockSize = sf.getBlockSize(); //總大小 long blockCount = sf.getBlockCount(); long availCount = sf.getAvailableBlocks(); //有效大小
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android讀取用戶號碼,手機串號,SIM卡序列號的實現(xiàn)代碼
以下是對Android讀取用戶號碼,手機串號,SIM卡序列號的實現(xiàn)代碼進行了介紹,需要的朋友可以過來參考下2013-07-07
Andriod Studio實現(xiàn)保存QQ密碼功能(案例代碼詳解)
這篇文章主要介紹了Andriod Studio實現(xiàn)保存QQ密碼功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
Android Studio 引入 aidl 文件的方法匯總
本文給大家分享的是在Android Studio中引入AIDL文件常用的兩種方法,小伙伴們根據(jù)自己的情況自由選擇,希望對大家能夠有所幫助2017-11-11
Android 中ListView點擊Item無響應(yīng)問題的解決辦法
如果listitem里面包括button或者checkbox等控件,默認情況下listitem會失去焦點,導(dǎo)致無法響應(yīng)item的事件,怎么解決呢?下面小編給大家分享下listview點擊item無響應(yīng)的解決辦法2016-12-12
Android開發(fā)之sqlite3命令行簡單使用方法
這篇文章主要介紹了Android開發(fā)之sqlite3命令行簡單使用方法,分析了Android增刪改查等常用sqlite3的數(shù)據(jù)庫操作命令使用方法,需要的朋友可以參考下2016-02-02

