关于Android4.4以上版本的外置存储器路径问题

       首先明确一下概念,手机外置存储器是什么? 

       目前的Android手机分为支持TF卡扩展和不支持TF卡扩展两种,一些手机称配置内存16G,32G,64G,128G等不支持TF卡存储扩展,而另一些手机配置内存8G,16G等,同时支持TF卡存储扩展。这里的内存,Android官方称为primary external storage,一般只能有一个,而TF外存储卡,官方称其为secondary  external storage可以有零到多个。

       在Android较老的版本中,外置存储器路径一般是指的/mnt/sdcard,而我们知道当前的部分Android手机支持存储卡扩展功能,于是Android将相关的路径挪到了/storage下面统一管理,打开Eclipse的DDMS->File Explorer,可以看到Android的文件目录树

        


       在/mnt/sdcard的目录属性中可以看到这个目录其实是一个连接,关于存储的文件目录树如下图

        

       在上面的目录树中可以看出Android对存储器的管理都统一到/storage下面,外存储器对应了sdcard0,sdcard1,sdcard2,sdcard3....(如果有手机提供两个以上TF卡扩展槽的话,市面上好像没有这种手机),之前的/mnt/sdcard指向/storage/emulated/legacy,同时sdcard0也是指向/storage/emulated/legacy,说明两者都是指的手机自带的外置存储器(手机自带的内存)。同时在/storage下有一个sdcard1目录,这个目录对应的就是手机的TF存储扩展卡。

       那么问题来了,开发人员会发现通过方法Environment.getExternalStorageDirectory()获取的是手机自带的外置存储路径/storage/emulated/0(这个路径不同的手机可能不同,但都是指向/storage/emulated/legacy,即primary external storage路径。怎么操作真正的外置TF卡?Android4.3之前可以用/storage/sdcard1表示外置TF卡路径,并在该目录下进行任意读写操作,然而从Android4.4开始,官方对第三方App的读写权限做了限制,应用不能随意操作外置TF卡的根目录,可以读/storage/sdcard1,不能写/storage/sdcard1,这就使应用不能随便在TF卡上创建文件夹。同时Android给第三方App保留了应用私有目录/storage/sdcard1/Android/data/[com.package.name]/files/,在该目录下应用拥有读写权限,该目录有一个特点就是一旦应用卸载,该文件夹下的文件也就随之删除,所以有的应用会给用户一个文件可能随卸载删除的提示。

        最后,如何获取到这个应用私有目录路径呢?

File[] filearray = getExternalFilesDirs(null);
for (File file : filearray) {
   System.out.println(file.toString());
}
          上面的代码通过getExternalFilesDirs()获取了所有外置存储器的应用私有目录路径,路径数组可能是

/storage/emulated/0/Android/data/com.example.httpdownloadtest/files  <=内外置存储器路径

/storage/sdcard1/Android/data/com.example.httpdownloadtest/files       <=TF卡路径

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值