48

背景

Android 在如何处理 SD 卡和存储方面有很多变化:

  • API 3 - 您获得所有访问权限,无需权限
  • API 4-15 - 您需要使用 WRITE_EXTERNAL_STORAGE,并且您可以获得所有访问权限。
  • API 16-18 - 如果您只想阅读,请使用 READ_EXTERNAL_STORAGE
  • API 19-20 - 您无法读取或写入辅助外部存储(SD 卡),除非您的应用程序是系统应用程序,或者您有 root。
  • API 21-22 - 为了访问 SD 卡,您需要请求用户许可,并使用 DocumentFile API 而不是 File API。正如我在这里这里这里所写的那样,这引发了很多问题。

从 API 23 (Android 6) 开始,事情似乎又发生了变化……

问题

对于 API 23,至少有两件事是新的并且与存储相关:

  • 可采用的存储设备” - 用户可以选择将 SD 卡设置为类似于主外部存储的东西。
  • 作为新权限机制的一部分(在运行时请求权限),存储似乎也是用户需要确认的权限。这适用于 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE

由于没有带有 SD 卡的 Android 6 设备,并且由于模拟器本身并没有真正使用 SD 卡的能力,因此仍然不可能知道发生了什么。

问题

  1. SD 卡会使用 File-API 而不是 DocumentFile 获得访问权限吗?

  2. 如果我想访问所有外部存储路径(包括 SD 卡),这是否意味着我需要两次请求此权限:一次用于主外部存储,一次用于 SD 卡?

  3. 在手动授予权限之前,是否可以通过任何方式访问 SD 卡上的文件?

  4. 假设用户选择使用“可采用的存储设备”,那么检索应用程序文件路径的各种功能意味着什么?例如:getFilesDir、getExternalFilesDir、...?getExternalFilesDirs 的顺序会因此而改变吗?

  5. 当用户将应用程序从/移到 SD 卡(使用“可采用的存储设备”)时,应用程序的文件会发生什么?SD卡上的应用程序文件呢?他们会留下来吗?或者他们会搬到某个地方吗?

    例如,如果应用程序在 SD 卡上具有“file1.txt”,路径为“/storage/extSdCard/Android/data/appPackageName”,并且它有一个文件“file2.txt”(甚至同名)在路径“/storage/emulated/0/Android/data/appPackageName”上的主外部存储上。切换后,这些文件会发生什么?如果有的话,它们将如何合并到一个文件夹中?

  6. 将应用程序移动到 SD 卡(使用“可采用的存储设备”)时,是否意味着不会使用内部存储?

4

2 回答 2

10

让我回答Adoptable Storage Devices相关的问题:

  1. 假设用户选择使用“可采用的存储设备”,这对于检索应用程序文件路径的各种功能意味着什么?例如:getFilesDir、getExternalFilesDir、...?getExternalFilesDirs 的顺序会因此而改变吗?

当用户选择使用 SD 卡作为“可采用的存储设备”(格式为内部)时,这意味着现在 SD 卡只能用作内部存储,即没有 SD 卡可用于存储下载的文件。相关方法返回的路径不会有顺序变化。例如:如果用户将其 SD 卡格式化为“可采用的存储设备”,则 getExternalFilesDir() 将仅列出外部存储路径。SD 卡路径将不可用。

  1. 当用户将应用程序从/移到 SD 卡(使用“可采用的存储设备”)时,应用程序的文件会发生什么?SD卡上的应用程序文件呢?他们会留下来吗?或者他们会搬到某个地方吗?例如,如果应用程序在 SD 卡上有“file1.txt”,路径为“/storage/extSdCard/Android/data/appPackageName”,并且它有一个文件“file2.txt”(甚至同名)在路径“/storage/emulated/0/Android/data/appPackageName”上的主外部存储上。切换后,这些文件会发生什么?如果有的话,它们将如何合并到一个文件夹中?

当用户将他的 SD 卡选择为“可采用的存储设备”时,用户需要使用“格式化为内部”选项将他的 SD 卡格式化为内部存储。格式化意味着存储在 SD 卡上的所有数据/文件都将被删除。同样,当用户想要从“可采用的存储设备”中删除他的 SD 卡时,用户必须再次使用“格式化为便携式”选项将他的 SD 卡格式化为便携式存储。

  1. 将应用程序移动到 SD 卡(使用“可采用的存储设备”)时,是否意味着不会使用内部存储?

是的,不会使用原始内部存储。仅使用 SD 卡存储,因为选择 SD 卡作为“可采用的存储设备”后。所有数据/缓存将存储到 SD 卡

于 2015-08-26T05:04:37.923 回答
1
于 2018-09-10T05:02:22.083 回答