当前位置: 首页 > 知识库问答 >
问题:

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

巫马泰
2023-03-14
  • API 3-您可以获得所有访问权限,不需要任何权限
  • API 4-15-您需要使用WRITE_EXTERNAL_STORAGE,您可以获得所有访问权限。
  • API 16-18-如果只希望读取,请使用read_external_storage
  • API 19-20-您不能读取或写入辅助外部存储(SD卡),除非您的应用程序是系统应用程序,或者您有根用户。
  • API 21-22-为了访问SD卡,您需要向用户请求权限,并使用DocumentFile API而不是File API。这就引出了很多问题,就像我在这里、这里和这里写过的那样。

从API23(Android6)开始,事情似乎又发生了变化...

对于API23,至少有2个新的与存储相关的东西:

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

由于没有Android6设备有SD卡,而且模拟器本身也不具备使用SD卡的能力,所以仍然无法知道发生了什么。

>

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

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

    在手动授予许可之前,SD卡上的文件是否以任何方式可访问?

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

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

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

  • 共有1个答案

    寇桐
    2023-03-14

    下面我来回答可采用存储设备的相关问题:

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

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

     类似资料:
    • 我开始开发Azure功能。我已经能够连接到我实际的azure存储帐户队列,以测试如何使用azure功能编程。现在,我的下一步是使用Microsoft Azure Storage Explorer来使用本地存储帐户,这样我就不必连接到Azure。我在这篇文章中看到了如何做到这一点:https://docs.microsoft.com/en-us/azure/storage/storage-confi

    • 我已经写了一个代码来录制音频并保存到下面的文件位置。 在Logcat中,它为我提供了一个文件位置 我无法在SD卡上找到此文件位置。如何访问该位置?

    • 对于vue-axios auth by api_token,我使用助手文件api.js。

    • 问题内容: 我只是做一个简单的应用程序来学习与redux异步。我已经使所有工作正常进行,现在我只想在网页上显示实际状态。现在,我实际上如何在render方法中访问商店的状态? 这是我的代码(所有内容都在一页中,因为我只是在学习): 因此,在状态的render方法中,我想列出商店中的所有内容。 谢谢 问题答案: 您应该创建单独的组件,该组件将侦听状态更改并在每次状态更改时进行更新:

    • 我试图在我的云功能中访问Firebase云存储,但我一直在云功能日志中出现以下错误: 下面是我的代码: const admin=需要('Firebase-admin'); const函数=需要('Firebase-函数'); 下面是我的包中的依赖项。json: PS:我在星火计划上

    • 我只是做了一个简单的应用程序学习异步与Redux。我已经使所有的工作,现在我只想显示的实际状态到网页上。现在,我如何在render方法中实际访问存储的状态? 这里是我的代码(所有内容都在一个页面中,因为我只是在学习): 谢谢