android获取外置sd卡路径

对于获取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();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值