问题标签 [scoped-storage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1017 浏览

android - Android:范围存储将应用程序文件夹从外部目录移动到 Android/data/com.myapp

我计划为我现有的应用程序实施范围存储。我所有的应用程序数据都存储在外部存储器的storage/emulated/0/MyAppName路径中。我必须将此数据移动到像Android/data/com.myapp这样的私人文件夹。任何人都可以提供一些代码片段来帮助解决这方面的问题吗?

0 投票
1 回答
324 浏览

android - 为什么在 API 级别 30 上使用范围存储无法访问某些音频文件?

我有以下代码来获取所有OPUS音频文件,它适用于除一个目录以外的所有文件,即WhatsApp Voice Notes. 虽然下的音频文件WhatsApp Audio被成功提取。我是否缺少访问内部文件的任何限制/权限WhatsApp Voice Notes

PS:在 Android 10 及之前的版本中,我可以通过循环访问android:requestLegacyExternalStorage="true"清单及以下使用的所有文件,urilistFilesfile

0 投票
0 回答
1929 浏览

android - 如何使用范围存储更新 Android 11 中的媒体存储?

我无法更新音频文件的 MediaStore 列,例如歌曲的标题、专辑、艺术家,尽管我使用 MediaStore.createWriteRequest() 和用户授权请求 uri 权限。当我执行 ContentResolver.update 时, noOfRowsUpdate 为 1,但未应用任何更改。

(在谷歌问题跟踪器中提出了同样的问题 - https://issuetracker.google.com/issues/173134422

0 投票
0 回答
453 浏览

android - 如何获得使用范围存储的 Android 11 中的 File 对象编辑文件的权限?

在 Android 10 范围存储中,完全限制了使用文件路径形成 File 对象。然而,根据许多反馈,这在 Android 11 中有所缓解(https://www.youtube.com/watch?v=RjyYCUW-9tY&ab_channel=AndroidDevelopers)。在视频中提到,您可以使用 File 对象并在用户同意的情况下通过请求权限来访问文件。

我无法弄清楚我应该获得什么权限来使用 File 对象编辑文件。我试过 SAF,它没有用。

(我想使用 ID3 标签编辑器库编辑音频文件的标签,该库以文件的形式输入。我尝试使用 SAF 获得权限,但它不起作用,我尝试使用 MediaStore.createWriteRequest() 获得权限,即使这没有'工作)

编辑 1:我正在使用 MediaStore.Audio.Media.DATA 列值获取文件路径。

换句话说,如果我们获得使用 SAF 文件的权限,我们是否可以使用 File 对象来编辑该文件(或)如果您通过 SAF 获得文件权限,您只能使用 DocumentFile 来编辑该文件.

编辑 2:当我使用 SAF 获得许可时,我能够使用 DocumentFile 编辑文件,但是我无法使用 File 对象进行编辑。

0 投票
2 回答
1329 浏览

android - Android 11:DocumentFile findFile() 太慢

随着谷歌存储策略的更新,我不得不改变我保存文件的方式。

首先,我的应用程序之前将项目文件夹保存到 /sdcard/。但是,由于这个政策,使用 File 访问变得不可能,我尝试了几种方法。

我也想过把它保存在一个特定于应用程序的文件空间中,但是由于删除应用程序时不应删除项目文件夹,因此无法使用。

1.使用媒体存储

起初,我尝试使用 MediaStore。我可以使用RELATIVE_PATH将文件放在一个文件夹中,但是文件的控制非常困难,并且项目文件夹中的文件也是与媒体(照片,视频,音乐)无关的文件。

2.使用文档文件

我找到了另一种方法。使用 Intent 的 ACTION_OPEN_DOCUMENT_TREE,我从用户那里获得了项目文件夹的访问权限和树 uri,并且我能够通过使用它创建 DocumentFile 来访问该文件。

起初我认为这是一个非常好的方法,但很快我发现它很慢。

特别是对于 findFile() 方法,扫描单个文件需要将近一秒钟的时间。我的项目文件夹里有几十个文件,所以这个不能商业化。

有没有更好的办法?有一些帖子要求您试用 DocumentContracts,但似乎没有获取文件列表或检查它们是否存在的功能。

以下是我当前的代码:首先,请求树 uri:

二、获取树uri:

而且,尤其是这样使用 findFile 时,它​​会变得非常慢。

0 投票
1 回答
358 浏览

android - Android Manifest 属性取决于 SDK 版本

Android 11 引入了各种隐私更改,包括范围存储。这意味着在 Android 11 或更高版本上,该应用不再

但我仍然需要在 Android 10 或更低版本上维护该功能。是否可以根据 SDK 版本声明 Manifest 权限和属性?

0 投票
1 回答
378 浏览

android - 在 Android 11 中将图片保存在应用程序保留的内存中

Android 11强制规定范围存储。在这种情况下,我希望我的应用程序拍摄一张照片并将其保存到某种应用程序保留的内存中,以便从图库中删除该图片时仍然可用。我正在使用以下方法

问题归结为我如何newFile在上面的代码段中创建,因为getExternalStoragePublicDirectory()由于范围存储而不再可用。我已经阅读了文档和各种帖子,但这个问题似乎很广泛和模糊。请避免发布指向MediaStoreAPI 的裸链接。

0 投票
0 回答
1683 浏览

android - Android 11 的 READ_EXTERNAL_STORAGE 权限

我有一个 Android 版本 < 9 的 Android 应用程序,
我使用了 READ_EXTERNAL_STORAGE 权限,一切正常

现在,如果用户在装有 Android 11 的移动设备上安装我的应用程序,会发生什么?

我的意思是权限请求是否再次正常工作,或者我将更改我的代码中的某些内容?

我知道 WRITE_EXTERNAL_STORAGE 权限将无法正常工作,并且应针对 android 10 和 11 上的范围存储问题更改代码

但是 READ_EXTERNAL_STORAGE 呢?

0 投票
1 回答
5730 浏览

android - 为什么 android:requestLegacyExternalStorage="true" 在 Android 10 中不起作用 - API 29

我已将我的项目 compileSdkVersion 从 28 迁移到 29,并在我的清单中添加 android:requestLegacyExternalStorage="true",但是像下载和文件打开这样的文件操作无法像在 SDK 28 中那样工作

分级文件

清单文件

文件下载代码

  • 路径应该是内部存储“/myapp/study materials/”中的文件夹位置
  • url 应该是来自服务器的文件位置 url

打开文件

  • 路径应该是内部存储“/myapp/study materials/”中的文件夹位置
  • 标题应该是文件名

文件存在性检查

  • 路径应该是内部存储“/myapp/study materials/”中的文件夹位置
  • 标题应该是文件名

我添加了所有在更新到 SDK 29 时不起作用的代码,我想从服务器下载文件并将其保存到内部存储中的应用程序特定文件夹中还需要在下载之前检查文件是否已经下载它。如果已经下载,我需要打开该文件

0 投票
1 回答
282 浏览

android - 如何使用 android Storage Access Framework 一次创建多个文件

在范围存储应用程序可以创建这样的文件集之前

但是对于范围存储,我们创建的每个文件都必须单独授予权限

我们如何使用访问存储框架在不逐个授予权限的情况下创建一组文本文件并将内容写入它们。