android开发的文件存储地址选择

作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过:

File sdCard = Environment.getExternalStorageDirectory();

获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,

SD卡根目录会迅速变得杂乱不堪。并且在API 6.0之后,根目录文件存储是需要用户授权的,就算你在

AndroidManifest.xml中配置了存储权限,用户不授权也是写不进去了.

SD卡读写权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

其实,Google已经提供了最佳的外部存储方案,那就是统一路径为:

/Android/data/< package name >/files/… (该路径通常挂载在/mnt/sdcard/下)

外部存储路径调用方法是:context.getExternalFilesDir(dir).getAbsolutePath() //通过context调用,

参数dir为自自定义文件夹.

这个方法获得的文件存储路径适用于6.0以后系统,主要AndroidManifest.xml配置读写权限了,

就不需要用户再授权了.

以上,是关于外部存储的介绍,那么如果有些手机没有SD卡或者系统自身没有分配外部存储空间,时,

我们应该怎么缓存数据呢?

那就需要用到内部存储了,内部存储的路径是: /data/data/< package name >/files/…

(该路径挂载在在手机自身存储目录)

内部存储路径调用方法是:context().getCacheDir().getAbsolutePath() //通过context调用


其中,getExternalCacheDir()与getCacheDir()的区别 与getExternalFilesDir()及getFilesDir()的区别相同,

一般正常的都是用getCacheDir()获取存储路径,这样app删除的时候可以跟着删除

其中,getExternalCacheDir()与getCacheDir()的区别 与getExternalFilesDir()及getFilesDir()的区别相同,

前者只是在路径下自动建好了一个cach文件目录:/data/< package name >/files/cach/...

存储区别简明示意图如下:

区别 方法 备注
 external storage 
 外部存储
Environment.getExternalStorageDirectory() SD根目录:/mnt/sdcard/ (6.0后写入需要用户授权)
context.getExternalFilesDir(dir) 路径为:/mnt/sdcard/Android/data/< package name >/files/… 
context.getExternalCacheDir() 路径为:/mnt/sdcard//Android/data/< package name >/cach/…
internal storage
 内部存储
context.getFilesDir() 路径是:/data/data/< package name >/files/…
context.getCacheDir() 路径是:/data/data/< package name >/cach/…


应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。
大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?
通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。
而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项,可以被系统清除
如果要保存下载的内容,就不要放在以上目录下

较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:
public String getDiskCacheDir(Context context) {
String cachePath = null;
//Environment.getExtemalStorageState() 获取SDcard的状态
//Environment.MEDIA_MOUNTED 手机装有SDCard,并且可以进行读写
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}
可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是 /sdcard/Android/data/<application package>/cache 这个路径,而后者获取到的是 /data/data/<application package>/cache 这个路径。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android X5是腾讯推出的一款高性能的移动浏览器内核,因其速度快、稳定性好等特点,被广泛应用于Android平台的应用程序中。在进行Android X5文件选择的二次开发时,我们可以根据具体需求,对文件选择组件进行个性化的定制和优化。 首先,在二次开发时,可以根据业务需求,对文件选择器的外观进行改变,以满足更好的用户体验。我们可以通过修改样式、颜色、图标等方式,使得文件选择器更加符合我们的应用的设计风格,增加可识别性和用户友好性。 其次,在二次开发中,还可以根据具体业务需求,增加一些定制化的功能。比如,我们可以添加文件预览、文件多选、文件排序等功能,以提供更加丰富的文件选择体验。同时,我们还可以根据需要设置过滤器,让文件选择器只显示特定类型或后缀名的文件,以便用户更快速地定位到需要选择文件。 另外,在二次开发中,可以对文件选择事件进行监听,以便获取选择文件信息。我们可以通过监听选择事件,获取文件的路径、大小、类型等信息,以便后续处理。比如,可以在文件选择后,进行文件上传、文件分享、文件操作等操作。 最后,对于文件选择二次开发,我们还需考虑到权限的处理。在Android系统中,访问外部存储需要获取相应的权限,因此我们需要在项目中添加相应的权限申请代码,以确保在使用文件选择功能时,用户授权我们的应用访问外部存储。 总的来说,Android X5提供了强大的文件选择功能,通过二次开发,我们可以对其进行个性化定制,满足不同场景的需求,从而为用户提供更好的文件选择体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值