Q 之前,申请了文件权限可以随意在 external 存储读写数据。
从 Q 开始,即使申请了文件权限 在外部存储 保存文件、创建文件夹等操作仍然会报 android.system.ErrnoException: open failed: EACCES (Permission denied) 权限错误。
Q 之后,存储文件需要以下几个步骤:
- 新建 ContentValues 对象,设置文件名、文件类别等信息
- 通过 MediaStore 请求一个新的 Uri。使用 ContentResolver 把 content values 插入到库,并返回一个 Uri。使用这个 Uri 保存数据。
- cv.put(MediaStore.Audio.Media.IS_PENDING, 0), 更新数据库
以保存图片为例:
1 | // Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q |
详见 保存到共享的存储空间