Android获取内外置存储卡的方法
以前的Android(4.1之前的版本)中,SDcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示存储卡,而在JellyBean系统中修改为了“/storage/sdcard0”,以后可能还会有多个SDcard的情况。
目前为了保持和之前代码的兼容,sdcard路径做了link映射。
为了使您的代码更加健壮并且能够兼容以后的Android版本和新的设备,请通过Environment.getExternalStorageDirectory().getPath()来获取sdcard路径,如果您需要往sdcard中保存特定类型的内容,可以考虑使用Environment.getExternalStoragePublicDirectory(Stringtype)函数,该函数可以返回特定类型的目录,目前支持如下类型:
DIRECTORY_ALARMS//警报的铃声 DIRECTORY_DCIM//相机拍摄的图片和视频保存的位置 DIRECTORY_DOWNLOADS//下载文件保存的位置 DIRECTORY_MOVIES//电影保存的位置,比如通过googleplay下载的电影 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,而hostusb存储器的路径也是各种各样的。
下面方法是通过反射,调用StorageManager的隐藏接口getVolumePaths(),实现获取存储器列表。
packageckl.storage.list;
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
importandroid.app.Activity;
importandroid.os.storage.StorageManager;
publicclassStorageList{
privateActivitymActivity;
privateStorageManagermStorageManager;
privateMethodmMethodGetPaths;
publicStorageList(Activityactivity){
mActivity=activity;
if(mActivity!=null){
mStorageManager=(StorageManager)mActivity
.getSystemService(Activity.STORAGE_SERVICE);
try{
mMethodGetPaths=mStorageManager.getClass()
.getMethod("getVolumePaths");
}catch(NoSuchMethodExceptione){
e.printStackTrace();
}
}
}
publicString[]getVolumePaths(){
String[]paths=null;
try{
paths=(String[])mMethodGetPaths.invoke(mStorageManager);
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}catch(InvocationTargetExceptione){
e.printStackTrace();
}
returnpaths;
}
}
在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的空间大小:
FilesdcardDir=Environment.getExternalStorageDirectory(); StatFssf=newStatFs(sdcardDir.getPath()); //sdcardDir.getPath())值为/mnt/sdcard,想取外置sd卡大小的话,直接代入/mnt/sdcard2 longblockSize=sf.getBlockSize();//总大小 longblockCount=sf.getBlockCount(); longavailCount=sf.getAvailableBlocks();//有效大小
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。