您的位置:首页 > 移动开发 > Android开发

android获取外置sd卡路径

2017-02-13 11:37 323 查看
对于获取android的外置sd卡路径纠结了好长时间,可能是我的境界还不够吧,找到了方法却不知道是什么意思,只知道是使用StorageManager,我先把获取方法贴出来,最近好好研究一下StorageManager这个类,研究完了再来补充,下面是方法:

public String[] getStoragePath() {
try {
StorageManager sm = (StorageManager) getSystemService(STORAGE_SERVICE);
Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", (Class<?>[]) null);
String[] paths = (String[]) getVolumePathsMethod.invoke(sm, (Object[]) null);
return paths;
} catch (Exception e) {
Log.e("info", "getStoragePath() failed", e);
}
return null;
}


这个方法获取的是所有可用存储的路径,其中path[0]是内置存储路径,path[1]是外置存储路径。

补充:经过一段时间的研究总算搞懂这个方法了,其实很简单,就是StorageManager中有一个方法可以获取所有可用存储的集合,但是这个方法是@hide的,也就是外部不能访问这个方法,所以上面的方法就是通过反射调用这个方法从而获取路径。

关于反射不懂的看我的另一篇文章: android中反射的应用

我又来补充了,一次偶然的机会,我看了api文档中的关于存储的介绍,主要内容就是

在api24中增加了一个类 StorageVolume专门用来管理存储目录的,而且在StorageManager中也新增了一个方法StorageManager.getStorageVolumes()。可以直接获取所有外部存储目录,但要注意的api24才能使用,可怜我的手机也才是api23;

还有就是关于getExternalFilesDirs()这个方法,我们都知道getExternalFilesDir()这个方法可以获取应用私有文件的保存路径,而getExternalFilesDirs()可以返回应用私有文件的保存路径数组,如果你的手机中插入内存卡,就可以得到内存卡的路径,

File[] file=getExternalFilesDirs(null);


注意:在这里保存的文件在应用卸载后会删除

另外再说一下getExternalCacheDirs()这个方法,这个是应用缓存数据的路径,在这里保存的数据会被清理垃圾时清理掉,同样他可以返回应用缓存文件的保存路径数组

File[] files=getExternalCacheDirs();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android