问题标签 [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 投票
1 回答
159 浏览

android - 如何在Android Q中将文件从应用程序特定文件夹(file://方案)复制到MediaStore图像集合(content://方案)?

我正在尝试使用此方法将文件从特定于应用程序的文件夹复制到 MediaStore 图像集合:

内容 uri 使用以下方法创建:

生成的图像无法打开。我究竟做错了什么?

0 投票
0 回答
204 浏览

android - 在 Android 10 (Q) 上拍摄和裁剪图像后,Google Photo App 崩溃

我在用于裁剪图像的Google 相册应用程序上遇到意外崩溃

这是完整的崩溃日志:

我正在从相机拍摄照片,然后裁剪照片。

启动相机代码:

作物意图代码:

我可以从“mCroppedPhotoUri”中获得裁剪的图像,但在裁剪后大约 1/2 秒后Google 照片应用程序崩溃(使用 Google 照片进行裁剪)。我把崩溃日志放在帖子的顶部。

它发生在Android 10(Q)上,但在Android 11(R)上运行良好。

我在Google 照片应用程序上做错了什么或它的错误?

0 投票
2 回答
660 浏览

android - Android 范围存储测试

我正在尝试在我的应用程序中测试范围存储,并且我需要能够打开和关闭范围存储以进行测试。根据开发文档:

要在您的应用中启用范围存储,无论您的应用的目标 SDK 版本和清单标志值如何,请启用以下应用兼容性标志:

DEFAULT_SCOPED_STORAGE(默认为所有应用启用) FORCE_ENABLE_SCOPED_STORAGE(默认为所有应用禁用)

重要提示:当关闭此更改以进行应用测试时,您还必须禁用 FORCE_ENABLE_SCOPED_STORAGE(如果尚未禁用)以恢复旧存储行为。

我可以在手机的开发者设置中切换 FORCE_ENABLE_SCOPED_STORAGE,但 DEFAULT_SCOPED_STORAGE 项已禁用且无法切换。我如何切换它?两个开关都必须设置为关闭位置以禁用范围存储以进行测试。

0 投票
0 回答
268 浏览

android - 使用 MediaStore 在 ContentResolver 的 insert() 方法上获取 Null Uri

我正在尝试将图像文件添加到 MediaStore,然后使用 ContentResolver 的 insert 方法中的 Uri 打开 OutputStream,如下所示:

在运行 Android 9 的设备上,picturesMediaUri 变量始终返回 null,因此我无法打开 OutputStream。

该应用程序具有文件读取和写入权限。

我究竟做错了什么?

0 投票
0 回答
428 浏览

android - 三星设备在 Android 11 中的 is_pending 更新崩溃

我只在三星设备中遇到了奇怪的崩溃。

请参阅下面的堆栈跟踪,

TagEditFailedException我自己的书面例外在哪里。实际的例外是,

最重要的是,寻找

Changing volume from /storage/3964-3431/Music/Bujji-MassTamilan.io.mp3 to /storage/emulated/0/Music/.pending-1608532169-Bujji-MassTamilan.io.mp3 not allowed

我调试了代码,发现在更新其他元数据之前更新 IS_PENDING 时应用程序崩溃了。

应用程序崩溃

在将 IS_PENDING 更新为 1 时

我不明白为什么更新 is_pending 会将卷从 SD_Card 更改为内部存储 (/storage/emulated/0...)。

  • 应用程序仅在 Android 11 设备上崩溃。仅在三星设备上也是如此。当我尝试编辑的曲目来自 SD-CARD 时也是如此。
  • 我尝试过使用 Android 11 像素设备,它运行良好。
  • 我正在尝试编辑的曲目位于 SdCard 中

/storage/3964-3431/Music/Bujji-MassTamilan.mp3

  • 我不明白为什么在三星 android 11 设备中将 IS_PENDING 更新为 1 时,媒体的根位置更改为内部存储

/storage/emulated/0/Music/...

摘要 - 当媒体文件来自 SD 卡时,应用程序仅在 Android 11 Samsung 设备中崩溃。

0 投票
1 回答
339 浏览

android - Android 10/11:带有 maxSdkVersion 标志的 WRITE_EXTERNAL_STORAGE 警告

随着 Android 10 中引入的范围存储,不再使用 WRITE_EXTERNAL_STORAGE 权限,我们会收到警告。但是据我所知,在 Q 以下的版本中仍然需要此权限,因此我在权限中添加了 android:maxSdkVersion="28" 。但这并不能消除警告。这是一个错误还是我必须做的其他事情?

0 投票
1 回答
503 浏览

android - 如何在 Android 11 中打开自定义图库

我正在使用自定义图库来选择图像,但在 android 11 中崩溃了,我发现由于范围存储

0 投票
1 回答
310 浏览

uri - Android 10 在内容 URI 上请求权限和持久权限

大家晚上好。我已经坚持了几天。我有一个 android 应用程序,它允许您添加图像并将它们显示在便笺中。我刚刚将手机升级到 Android 10,新的 SAF 规则似乎让我陷入困境。以前在 android 10 之前,如果将图像移动到另一个文件夹,我不必再次请求该 URI 的权限,URI 没有更改,我将继续访问该图像。现在看来 URI 发生了变化,我必须请求新 URI 的权限。

此外,在将数据从旧手机传输到新手机时,我希望能够维护我保存的图像,并且不会丢失对这些数据的引用。

我现在在哪里:

我之前只是将内容 URI 存储在 Room 中。我相信我需要存储内容 URI 以及显示名称。然后我可以通过查询 MediaStore 来获取新的 Content URI。从那里我无法获得对我获得的新内容 URI 的权限。如果我在这个 URI 上请求 persistentPermissions,我只会得到一个“无权限异常”。我已请求 READ_EXTERNAL_STORAGE 并且可以获得我的应用程序可以访问的有效内容 Uri

是否有操作或者我可以在内容 URI 上请求这些权限?有没有办法使用 ACTION_OPEN_DOCUMENT 打开特定的内容 URI,以便用户可以再次选择文件并再次授予我权限?更好的是,有没有一种方法可以使用 ACTION_OPEN_DOCUMENT 从我提供的内容 URI 列表中打开图像列表,并允许用户再次授予所有这些图像的权限?

这是我用来尝试重新获得对已移动(或重新导入到新手机)contentUri 的访问权限的代码(使用现在只是硬编码的文件名)

0 投票
0 回答
142 浏览

android - Android 文件应用程序是否应该能够看到其他应用程序的范围存储?

因此,我正在尝试确认我在 Android 上的范围存储使用是否正常工作。

注意 - 我正在使用 Xamarin,但希望可以很好地解释这一切,所以它只是一个一般的 Android 问题。

我正在将数据保存到以下位置....

这会产生与此类似的 URL...

根据这里的文档(但是,嘿,它的 Android 文档),我相信这是正确的......

https://developer.android.com/about/versions/11/privacy/storage

从 Android 11 开始,应用无法在外部存储上创建自己的应用特定目录。要访问系统为您的应用程序提供的目录,请调用 getExternalFilesDirs()

但是,Android 上的内置文件应用程序可以浏览并查看所有存储在那里的文件吗?这是……预期的吗?我假设范围存储完全隐藏在视图中?我可以转到主存储 -> Android -> 数据 -> com.xxx.xxx -> 文件 -> 文档,然后在“范围存储”中查看我的所有文件?

注意 - 我正在测试的手机目前仅运行 Android 10,但我没有使用 requestLegacyExternalStorage,我的目标是 30。

0 投票
1 回答
880 浏览

android - 未在面向 Android 11 的应用上实施范围存储

我正在运行 Android 9 的设备上测试我的应用程序。根据我的 Gradle 文件,该应用程序现在以 Android 11 为目标:

在运行应用程序之前,我从测试设备中删除了以前的版本。

当使用以下代码运行面向 Android 11 的应用时:

该应用程序创建可访问和可删除的 MyFolder/myFile.boo。

开发者文档明确指出:https ://developer.android.com/about/versions/11/privacy

“面向 Android 11 或更高版本的应用程序始终受制于范围存储行为。” 文档没有提及特定手机的 android 版本的任何例外。

当我的应用声明它将使用范围存储时,为什么我能够在新的范围存储限制下创建和访问此文件?