Android Q适配(存储空间)

介绍

developer.android.google.cn/preview/pri…

存储访问框架:developer.android.google.cn/guide/topic…

FileProvider:developer.android.google.cn/training/se…

测试方案

测试行为变更

要在 Android Q 测试版 1 中启用此行为变更,请在终端窗口中执行以下命令:

adb shell sm set-isolated-storage on

查看是否已生效

adb shell getprop sys.isolated_storage_snapshot

测试兼容性模式行为

测试您的应用时,您可以通过在终端窗口中运行以下命令来为外部文件存储访问权限启用兼容性模式:

adb shell cmd appops set your-package-name android:legacy_storage allow

停用兼容性模式,请在 Android Q 上卸载然后重新安装您的应用,或在终端窗口中运行以下命令

adb shell cmd appops set your-package-name android:legacy_storage default

影响

变更如下

developer.android.google.cn/preview/pri…

  1. 私有文件沙盒

    1. 沙箱目录: /sdcard/Android/sandbox/packagename/
    2. 任何其他应用都无法直接访问您应用的沙盒文件。由于文件是您应用的私有文件,因此您不再需要任何权限即可在外部存储设备中访问和保存自己的文件
    3. 当app卸载后,沙箱中的文件删除
  2. 媒体文件共享集合

    1. 访问权限
    2. 共享方案
  3. 照片访问

    1. 位置信息
    2. 图库显示
  4. 跨应用文件 读取和存储跨应用文件

影响范围

Google 把 Android Q 上会被沙箱化条件设为 Target SDK 至少为 Q (29) 的应用或者运行 Android Q 时全新安装的应用。不符合这个条件的应用将会运行在兼容模式下,在兼容模式中应用行为大致和过去相同,以保证不会出现严重的数据丢失问题。兼容模式在应用重新安装后会被关闭。

注意:即使应用Target SDK < 29也会被沙箱化

影响点

  1. 沙箱化后,沙箱目录:/sdcard/Android/sandbox/packagename/,应用不能再通过 Java File API 来互相访问内部存储文件数据,应用访问 “/sdcard” 实质上访问的是你的应用的沙箱目录,可以理解为“存储重定向”; getExternalStoragePublicDirectory(),getExternalStorageDirectory(),/storage/emulated/0 都会直接映射到沙箱目录;访问这些文件路径存在自动映射,因此正常直接使用理论上都是没问题的。

  2. 可能存储数据丢失:当用户手机从Android Q以下版本升级到Android Q版本的时候,应用访问不了之前保存在/sdcard下面的内容

  3. 沙箱空间跟过去的内部存储空间内 “Android/data/packagename” 的文件夹一样,会在应用卸载时被永久清除无法恢复,因此比如一些用户主动下载保存的文件固然不能存在沙箱空间,需要存到沙箱外面

检查及适配

checke点

sdcard

getExternalStorageDirectory

getExternalStoragePublicDirectory

/emulated/0

适配方案

  1. 通过存储方案框架https://developer.android.google.cn/guide/topics/providers/document-provider
  2. 配套应用文件共享https://developer.android.google.cn/training/secure-file-sharing/setup-sharing
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值