获取android应用缓存目录时遇到的问题

先说需求:调用系统相机拍照,将得到的图片上传到服务器,

  1. 问题1.
    用context.getCacheDir()方法得到路径是/data/user/0/(项目包名)/cache,我在此目录通过file.createNewFile()方法创建成功,将此file传给系统相机Activity,当拍照结束时,发现resultCode=0(代表拍照取消).错误截图如下:这里写图片描述但是手机确实是有该文件的,截图如下:
    这里写图片描述
    猜想:可能是系统相机没有向/data/user/0/(项目包名)/cache/文件中写入数据的权限
  2. 问题2
    然后换成了sd中的应用缓存目录:/storage/emulated/0/Android/data/(项目包名)/cache/
    我实验了两种写法:
    1.第一种可以直接写静态变量:
Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator+"Android"+ File.separator+"data"+File.separator+(项目包名)+File.separator +"cache"+File.separator + "send" + File.separator;

2.第二种是通过context对象创建:

context.getExternalCacheDir()+ File.separator + "send" + File.separator;

虽然两种写法的路径是一样的,但第一种属于通过app本身创建文件夹,仍然需要写入sd卡数据的权限
而第二种则是在调用context.getExternalCacheDir()时系统底层就会创建该目录,因此不需要权限
3. 总结
最终选择了通过context对象创建的方式
这里写图片描述

猜你喜欢

转载自blog.csdn.net/razor1991/article/details/52623351