国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android獲取內外置存儲卡的方法

2019-10-23 18:32:25
字體:
來源:轉載
供稿:網友

以前的Android(4.1之前的版本)中,SDcard跟路徑通過“/sdcard”或者“/mnt/sdcard”來表示存儲卡,而在Jelly Bean系統中修改為了“/storage/sdcard0”,以后可能還會有多個SDcard的情況。

目前為了保持和之前代碼的兼容,sdcard路徑做了link映射。

為了使您的代碼更加健壯并且能夠兼容以后的Android版本和新的設備,請通過Environment.getExternalStorageDirectory().getPath()來獲取sdcard路徑,如果您需要往sdcard中保存特定類型的內容,可以考慮使用Environment.getExternalStoragePublicDirectory(String type)函數,該函數可以返回特定類型的目錄,目前支持如下類型:

DIRECTORY_ALARMS //警報的鈴聲DIRECTORY_DCIM //相機拍攝的圖片和視頻保存的位置DIRECTORY_DOWNLOADS //下載文件保存的位置DIRECTORY_MOVIES //電影保存的位置, 比如 通過google play下載的電影DIRECTORY_MUSIC //音樂保存的位置DIRECTORY_NOTIFICATIONS //通知音保存的位置DIRECTORY_PICTURES //下載的圖片保存的位置DIRECTORY_PODCASTS //用于保存podcast(博客)的音頻文件DIRECTORY_RINGTONES //保存鈴聲的位置

如果您的應用需要下載以上類型的文件,則可以放到上面對應的目錄中去來幫助用戶查找,比如最常用的就是下載文件了。如果您開發了一個瀏覽器,在下載文件的時候把文件下載到Download目錄則方便用戶以后查找該文件,當然如果你希望用戶需要通過啟動您的程序來查看他們下載的文件,您也可以不這么做 ^_^。

在使用這些目錄保存文件的時候,需要注意一點:其他程序也有可能在使用這些目錄,在保存文件前,注意判斷下文件是否已經存在,不要覆蓋了用戶之前的數據。

Android4.1之后Android增加了多存儲卡的支持,一般手機會存在內置存儲卡和外置存儲卡,也可能有多個外置存儲卡。如何獲取存儲卡路徑呢?

特別是各種android設備的存儲器路徑,是不一樣的,比如T卡路徑,可能是/mnt/sdcard、/mnt/extsd、/mnt/external_sd 或者/mnt/sdcard2。有時內置存儲器的路徑也可能是/mnt/sdcard,而host usb存儲器的路徑也是各種各樣的。

下面方法是通過反射,調用StorageManager的隱藏接口getVolumePaths(),實現獲取存儲器列表。

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中,判斷內置SD卡是否掛載:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//為true的話,內置sd卡存在}

判斷外置SD卡是否掛載:

if(Environment.getStorageState(Environment.STORAGE_PATH_SD2).equals(Environment.MEDIA_MOUNTED)){//為true的話,外置sd卡存在}

順帶描述怎么取得sdcard的空間大小:

File sdcardDir = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(sdcardDir.getPath()); //sdcardDir.getPath())值為/mnt/sdcard,想取外置sd卡大小的話,直接代入/mnt/sdcard2long blockSize = sf.getBlockSize(); //總大小long blockCount = sf.getBlockCount();long availCount = sf.getAvailableBlocks(); //有效大小

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大冶市| 三江| 永城市| 余庆县| 青神县| 临夏市| 桂阳县| 获嘉县| 来宾市| 华安县| 娱乐| 巴中市| 和林格尔县| 都昌县| 泽库县| 宣城市| 连江县| 义乌市| 治县。| 阳春市| 砀山县| 长泰县| 资溪县| 霸州市| 温宿县| 盐亭县| 绩溪县| 陇川县| 徐闻县| 镇赉县| 华宁县| 绍兴市| 武定县| 六安市| 兴山县| 浪卡子县| 阿勒泰市| 麻阳| 普宁市| 嵊泗县| 博野县|