关于 Android 保存文件的权限问题,想请教一下

2022-09-21 11:02:58 +08:00
 zhttp

在 Android 平台写一个图像处理的 demo 来验证一下算法,主要是用 mediacodec 读 mp4 文件解码,逐帧处理图像,然后再编码封装成 mp4 ,现在只完成了前半部分,编码的部分还没有写,想把处理完成的图像保存一帧下来看看效果,结果卡在了保存这一步。
目前已经完成的事情:
1 、在 AndroidManifest.xml 里面添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2 、在 mainactivity 里面加了请求权限的代码,第一次打开应用也选择了始终同意,可以读 mp4 文件,但是无法新建文件,file.canWrite 返回 false ,Environment.getExternalStorageDirectory().canWrite()返回 false ,canRead 返回 true ,也就是只有读权限没有写权限;
3 、文件目录是 /storage/emulated/0/DCIM/myapp/test.yuv 这样子的
Android 新手,还请指教。

9065 次点击
所在节点    Android
12 条回复
okakuyang
2022-09-21 11:33:42 +08:00
在安卓 9/10 以上系统强制启用文件分区,App 只能读写自己的文件目录,你上面的方法已经过时了。
如果是在照片下载等公共目录读写也需要申请相关的权限。
dingwen07
2022-09-21 14:54:07 +08:00
个人观察 2022 年还在非必要使用 WRITE_EXTERNAL_STORAGE 的软件 90%都很烂
dingwen07
2022-09-21 14:55:22 +08:00
7c00
2022-09-21 15:21:39 +08:00
google 为了限制 WRITE_EXTERNAL_STORAGE 的滥用,从 android 11 开始 WRITE_EXTERNAL_STORAGE 就只能写入媒体目录。要能像之前一样读写所有目录需要新权限 MANAGE_EXTERNAL_STORAGE ,这个权限貌似会影响是否能上架 google play ,但在国内,这个权限还是继续被滥用就是了。
bingoway
2022-09-21 15:52:04 +08:00
q503315508
2022-09-21 15:54:28 +08:00
android/data/${packageName}/
deng81416754
2022-09-21 16:03:05 +08:00
deng81416754
2022-09-21 16:07:51 +08:00
7c00
2022-09-21 17:09:06 +08:00
@bingoway requestLegacyExternalStorage 只对 android 10 有用,从 11 起,requestLegacyExternalStorage 被废弃
gaifanking
2022-09-21 17:43:41 +08:00
@7c00 这里的 11 是编译时 targetSdkVersion ,不是运行的手机的版本号。
@zhttp 你的动态权限申请 申请了 WRITE 权限吗?
zhttp
2022-09-21 17:56:17 +08:00
感谢楼上各位的回复和帮助,我查了一下午文档以及 StackOverflow 之后,现在基本上勉强能用了,我原本是使用 FileOutputStream 直接在 Environment.getExternalStorageDirectory()下面写,现在改成了使用 MediaStore ,可以正常保存文件,参考了开发者文档和这个链接 https://stackoverflow.com/questions/56904485/how-to-save-an-image-in-android-q-using-mediastore
zhttp
2022-09-21 18:07:53 +08:00
@anjxue 权限问题我完全没搞懂。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX