首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 6上的存储访问是如何变化的?

Android 6上的存储访问是如何变化的?
EN

Stack Overflow用户
提问于 2015-08-20 22:50:45
回答 2查看 28.6K关注 0票数 48

背景

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

  • API 3-您可以获得所有访问,不需要任何权限。
  • API4-15-你需要使用WRITE_EXTERNAL_STORAGE,并且你可以访问.
  • API 16-18 -如果您只想阅读,请使用READ_EXTERNAL_STORAGE
  • API 19-20 -你不能读或写到二级外部存储器(SD-卡),除非你的应用程序是一个系统应用程序,或者你有根。
  • API21-22-为了访问SD卡,您需要向用户请求许可,并使用DocumentFile API而不是File。就像我写的关于hereherehere的文章一样,这引起了很多问题。

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

问题所在

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

  • "Adoptable Storage Devices“-用户可以选择将SD卡作为类似于主外部存储的东西。
  • 作为new permissions mechanism (在运行时请求权限)的一部分,存储似乎也是用户需要确认的权限。这是针对READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE的

由于没有配备SD卡的Android 6设备,而且由于模拟器本身没有使用SD卡的能力,所以仍然不可能知道发生了什么事情。

问题

  1. SD卡会使用文件API而不是DocumentFile访问吗?
  2. 如果我想访问所有外部存储路径(包括SD卡),这是否意味着我需要两次请求这个权限:一个用于主外部存储,另一个用于SD卡?
  3. 在手动授予许可之前,SD卡上的文件是否可以访问?
  4. 假设用户选择使用“”,对于检索应用程序文件路径的各种函数来说,这意味着什么?例如: getFilesDir,getExternalFilesDir,.?getExternalFilesDirs的数量会因此而改变吗?
  5. 当用户将应用程序从SD卡移动到SD卡(使用"Adoptable Storage Device“)时,应用程序的文件会发生什么情况?那应用程序在SD卡上的文件呢?他们会留下来吗?或者他们会搬到什么地方去? 例如,如果应用程序在SD卡上有"file1.txt“,那么路径"/storage/extSdCard/Android/data/appPackageName",上有一个文件"file2.txt”(甚至同名)在路径"/storage/emulated/0/Android/data/appPackageName".上的主外部存储器上。切换后,这些文件会发生什么情况?如果有的话,它们如何合并到一个文件夹中呢?
  6. 当将应用程序移动到SD卡(使用“可移植存储设备”)时,是否意味着不使用内部存储?
EN

回答 2

Stack Overflow用户

发布于 2015-08-26 05:04:37

让我回答可兼容存储设备相关问题:

  1. 假设用户选择使用“”,对于检索应用程序文件路径的各种函数来说,这意味着什么?例如: getFilesDir,getExternalFilesDir,.?getExternalFilesDirs的数量会因此而改变吗?

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

  1. 当用户将应用程序从SD卡移动到SD卡(使用"Adoptable Storage Device“)时,应用程序的文件会发生什么情况?那应用程序在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卡上。

票数 10
EN

Stack Overflow用户

发布于 2018-09-10 05:02:22

要回答您的问题5:在Android7下,“公共数据”区域、/storage/emulated/0/ (或特定于制造商的位置;它是包含DCIM Downloads等的目录)中的所有文件都完全存储在内部内存中或完全存储在采用的SD卡上。在采用SD卡的初始格式之后,用户将有机会“迁移数据”,这将将所有/storage/emulated/0移动到SD卡。在任何时候,用户也可以转到设置/存储,选择当前不包含公共数据区域的存储区域,然后单击右上角的 (三个垂直点)图标,以显示带有“迁移数据”选项的菜单。

如果采用的卡正在使用,用户或应用程序似乎无法强制某个特定的公共文件进入SD卡;它要么全部要么什么也没有。(根据应用程序是否已被移动到SD卡上,应用程序的私有存储将位于内部存储器或SD卡上;在那里,应用程序似乎也将只使用其中一种或另一种,而不是两者兼用。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32129716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档