android 高速存储访问,Android存储访问及目录

Android的外部存储

Android支持外部存储(case-insensitive filesystem with immutable POSIX permission classes and modes)。

外部存储可以通过物理介质提供(如SD卡),也可以通过将内部存储中的一部分封装而成,设备可以有多个外部存储实例。

访问外部存储的权限

从Android 1.0开始,写操作受权限WRITE_EXTERNAL_STORAGE保护。

从Android 4.1开始,读操作受权限READ_EXTERNAL_STORAGE保护。

从Android 4.4开始,应用可以管理在它外部存储上的特定包名目录,而不用获取WRITE_EXTERNAL_STORAGE权限。

比如,一个包名为com.example.foo的应用,可以自由访问外存上的Android/data/com.example.foo/目录。

外部存储对数据提供的保护较少,所以系统不应该存储敏感数据在外部存储上。

特别地,配置和log文件应该存储在内部存储中,这样它们可以被有效地保护。

Environment API的目录

但是这个目录很可能当前不能访问,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,你可以通过

为了不污染用户的根命名空间,一般不会直接使用这个外部存储的根目录。

任何应用私有的文件的应该被放置在 Context.getExternalFilesDir返回的目录下,在应用被卸载的时候,系统会清理的就是这个目录。

另一些共享文件应该被放置在 getExternalStoragePublicDirectory(String)返回的目录中。写这个路径需要

从即Android 4.4开始,如果你的应用只是需要存储一些内部数据,可以考虑使用 :

getExternalStoragePublicDirectory(String type)这个方法接收一个参数,表明目录所放的文件的类型,传入的参数是Environment类中的DIRECTORY_XXX静态变量,比如DIRECTORY_DCIM等。

note:传入的类型参数不能是null,返回的目录路径有可能不存在,所以必须在使用之前确认一下,比如使用File.mkdirs创建该路径。

getRootDirectory()得到Android的根目录。

isExternalStorageEmulated()设备的外存是否是用内存模拟的,是则返回true。(API Level 11)

isExternalStorageRemovable()设备的外存是否是可以拆卸的,比如SD卡,是则返回true。(API Level 9)

Context API中的目录

getExternalFilesDir(String type)是应用在外部存储上的目录。

和Environment类的getExternalStoragePublicDirectory(String type)方法类似,返回包含参数指定的特定类型文件的子目录

getExternalCacheDir()是应用的在外部存储上的缓存目录。

从Android 4.4 开始上面两个方法不需要读写权限。Android 4.4 之前的版本要访问需要声明读写权限,如果没有声明权限,上面方法会返回null

与上面两个方法形成对比的是下面两个方法:

getCacheDir()

这两个方法得到的是内存上的目录。

这些目录都是属于应用的,当应用被卸载的时候,里面的内容都会被移除,但是不要依赖于系统的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值