TargetSdkVersion升级到30后文件存储

TargetSdkVersion升级到30后文件存储

Android 存储目录

  • 私有存储 (Private Storage) : 每个应用在都拥有自己的私有目录,其它应用看不到,彼此也无法访问到该目录。
  • 内部存储私有目录 (/data/data/packageName) ;
  • 外部存储私有目录 (/sdcard/Android/data/packageName);
  • 共享存储 (Shared Storage) : 存储其他应用可访问文件, 包含媒体文件、文档文件以及其他文件,对应设备DCIM、Pictures、Alarms、Music、Notifications、Podcasts、Ringtones、Movies、Download等目录。
  • 外部存储:Environment.getExternalStorageDirectory()获取sdcard下的任意文件夹,在SDK29以上已经过期、失效。

外部存储和TargetSdkVersion兼容情况:

  • targetSdkVersion = 28,运行后正常读写所有文件,如果不是必须的需求并且是新创建的项目的话,建议把文件按照规范存储在外部存储私有目录 (/sdcard/Android/data/packageName)
  • targetSdkVersion = 29,targetSdkVersion 由 低版本 修改到 29,覆盖安装,运行后正常读写。
  • targetSdkVersion = 29,卸载旧应用,重新安装新应用,如果读写外部存储,程序崩溃 (open failed: EACCES (Permission denied))
  • targetSdkVersion = 29,添加android:requestLegacyExternalStorage=”true”(不启用分区存储),读写正常不报错
  • targetSdkVersion = 30,targetSdkVersion 由 低版本 修改到 30,覆盖安装,读写报错,程序崩溃 (open failed: EACCES (Permission denied))
  • targetSdkVersion = 30,targetSdkVersion 由 低版本 修改到 30,覆盖安装,增加 android:preserveLegacyExternalStorage=”true”,读写正常不报错
  • targetSdkVersion = 30,卸载旧应用,重新安装新应用,不管设置任何配置,如果读写外部存储,程序崩溃 (open failed: EACCES (Permission denied))

特别感谢

特别感谢以下博文

targetSdkVersion 升级到29、30文件处理:https://www.jianshu.com/p/892a2ca5c41e

作者

Dench

发布于

2023-11-03

更新于

2023-11-03

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×