新聞中心
這篇文章將為大家詳細(xì)講解有關(guān)內(nèi)置與外置的存儲(chǔ)卡如何在Android應(yīng)用中獲取,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)公司專注于成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
以前的Android(4.1之前的版本)中,SDcard跟路徑通過“/sdcard”或者“/mnt/sdcard”來表示存儲(chǔ)卡,而在Jelly Bean系統(tǒng)中修改為了“/storage/sdcard0”,以后可能還會(huì)有多個(gè)SDcard的情況。
目前為了保持和之前代碼的兼容,sdcard路徑做了link映射。
為了使您的代碼更加健壯并且能夠兼容以后的Android版本和新的設(shè)備,請(qǐng)通過Environment.getExternalStorageDirectory().getPath()來獲取sdcard路徑,如果您需要往sdcard中保存特定類型的內(nèi)容,可以考慮使用Environment.getExternalStoragePublicDirectory(String type)函數(shù),該函數(shù)可以返回特定類型的目錄,目前支持如下類型:
DIRECTORY_ALARMS //警報(bào)的鈴聲 DIRECTORY_DCIM //相機(jī)拍攝的圖片和視頻保存的位置 DIRECTORY_DOWNLOADS //下載文件保存的位置 DIRECTORY_MOVIES //電影保存的位置, 比如 通過google play下載的電影 DIRECTORY_MUSIC //音樂保存的位置 DIRECTORY_NOTIFICATIONS //通知音保存的位置 DIRECTORY_PICTURES //下載的圖片保存的位置 DIRECTORY_PODCASTS //用于保存podcast(博客)的音頻文件 DIRECTORY_RINGTONES //保存鈴聲的位置
如果您的應(yīng)用需要下載以上類型的文件,則可以放到上面對(duì)應(yīng)的目錄中去來幫助用戶查找,比如最常用的就是下載文件了。如果您開發(fā)了一個(gè)瀏覽器,在下載文件的時(shí)候把文件下載到Download目錄則方便用戶以后查找該文件,當(dāng)然如果你希望用戶需要通過啟動(dòng)您的程序來查看他們下載的文件,您也可以不這么做 ^_^。
在使用這些目錄保存文件的時(shí)候,需要注意一點(diǎn):其他程序也有可能在使用這些目錄,在保存文件前,注意判斷下文件是否已經(jīng)存在,不要覆蓋了用戶之前的數(shù)據(jù)。
Android4.1之后Android增加了多存儲(chǔ)卡的支持,一般手機(jī)會(huì)存在內(nèi)置存儲(chǔ)卡和外置存儲(chǔ)卡,也可能有多個(gè)外置存儲(chǔ)卡。如何獲取存儲(chǔ)卡路徑呢?
特別是各種android設(shè)備的存儲(chǔ)器路徑,是不一樣的,比如T卡路徑,可能是/mnt/sdcard、/mnt/extsd、/mnt/external_sd 或者/mnt/sdcard2。有時(shí)內(nèi)置存儲(chǔ)器的路徑也可能是/mnt/sdcard,而host usb存儲(chǔ)器的路徑也是各種各樣的。
下面方法是通過反射,調(diào)用StorageManager的隱藏接口getVolumePaths(),實(shí)現(xiàn)獲取存儲(chǔ)器列表。
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(); //有效大小
關(guān)于內(nèi)置與外置的存儲(chǔ)卡如何在Android應(yīng)用中獲取就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)站名稱:內(nèi)置與外置的存儲(chǔ)卡如何在Android應(yīng)用中獲取
網(wǎng)站URL:http://fisionsoft.com.cn/article/ggdeij.html