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

android - 在 Android 10+ 上从外部存储(包括下载文件夹)获取所有文件

我正在尝试从外部存储中获取所有文件。问题在于下载文件夹。MediaStore.Downloads仅返回由我的应用程序创建的文件。

我发现这篇文章:https ://developer.android.com/training/data-storage/manage-all-files理论上应该有助于解决我的问题。但我无法在我的 Android 10 设备上获得该权限。它显示“未找到活动”。

我应该使用其他东西(不是MediaStore API)来获取所有文件吗?我需要获取名称、大小和其他信息,因此我无法使用存储访问框架。

0 投票
1 回答
17805 浏览

android - 如何获得 MANAGE_EXTERNAL_STORAGE 权限

我正在尝试在我的 Android 10 (API 29) 设备上获得MANAGE_EXTERNAL_STORAGE权限。

https://developer.android.com/training/data-storage/manage-all-files

显现:

主要活动:

结果是:

好的,这种行为是可能的。医生说:

但是我怎样才能获得该许可呢?

0 投票
2 回答
493 浏览

flutter - 在 Android 10 及更高版本中使用 Flutter 创建新的可共享文本文件

从 API 29 (Android 10) 开始,引入了Scoped Storage。早些时候,我能够直接创建一个可共享文件并在Flutter中使用它写入:

但是现在随着隐私的变化,即使在我授予存储权限之后,在 Android 10 中似乎也无法做到这一点。

根据文件

将任何共享的非媒体文件移动到 Downloads/ 目录的应用程序专用子目录。

我的问题是:

  • 如果可以,我还能在 中创建文件/storage/emulated/0/MyApp/myFile.txt吗?
  • 如果没有,那么我可以/storage/emulated/0/Download/MyApp/myFile.txt直接从 Flutter 中创建一个文件而无需平台代码吗?
  • 如果我需要使用特定于平台的代码,使用文件选择器是 txt 文件的唯一选择吗?

也不想使用android:requestLegacyExternalStorage="true",因为那样我的应用程序将不适用于 Android 11。

0 投票
0 回答
858 浏览

android - 如何使用 Media Store API - Scoped Storage Android 将媒体文件保存在应用程序特定的文件夹中

我正在尝试使用适用于 Android 10 及更高版本的范围存储来将从相机拍摄的图像保存在应用程序特定文件夹中。我知道如何使用 File API 来做到这一点,但我正在寻找使用 Media store API 来做到这一点。

这是问题所在,使用以下代码将图像保存在内部存储>图片中,但不会将其保存在应用程序特定的文件夹中。因此,如果我卸载应用程序,应用程序保存的图像仍然保留在内存中。如果用户从手机中删除该应用程序,我希望它们自动删除。

如果我做错了或遗漏了什么,请告诉我。

0 投票
1 回答
3639 浏览

android-download-manager - Android:为什么我无法在 Android 11 的公共 Download/myfolder 目录中打开从 DownloadManager 下载的 pdf?

我在 Android 9 中没有遇到这个问题,在 Android 10 中我选择了旧版存储。但在 Android 11 中,我无法打开从下载管理器下载的文件。不过,可以从文件管理器打开相同的文件。

另外,我检查了该文件的所有者,它显示的是 com.android.providers.downloads 而不是我的应用程序。

我还在 Document/myfolder 目录中创建了一个 pdf 文件,它可以使用意图轻松打开,并且我的应用程序是该文件的所有者。

此外,如果我将下载的文件保存到 Document/myfolder 目录,它仍然无法使用该意图打开。

据我了解,从 Android 11 开始,他们引入了范围存储,以及该文件的所有者是否正在访问它。它将允许通过 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限进行读/写。

对于这两个文件,我使用的是相同的 Intent。

任何人都知道如何更改我下载的文件的所有者以便我可以打开或者我无法打开下载的文件的确切原因是什么?

这里 PDF_TYPE 是正确的,uri 也是正确的。

DownloadManager 代码在这里也是正确的一小段

0 投票
0 回答
1270 浏览

android - ACCESS_MEDIA_LOCATION 权限请求未显示提示

我已将我的应用程序设置为以 AP 29 为目标并requestLegacyExternalStorage=true从清单中删除。

现在我正在检查用户是否具有此权限,如果结果被拒绝,我请求权限。

我的问题是权限请求正在返回Granted而没有显示提示...我知道流程正在运行,因为我能够在被授予后从图片中读取 GPS 位置

我看到权限状态 =Denied并且一旦我明确请求此权限,它就会在Granted没有任何用户交互的情况下返回。

一切看起来都不错,但我对没有看到提示感到困惑……这是预期的吗?我看到这个权限被认为是“危险的”,所以我期待一个提示。我正在 Android 10 设备上进行测试。

我没有显示任何代码,因为该项目是 Xamarin 并且权限逻辑是通过第三方库处理的,不要认为我的代码会有所帮助,因为请求权限的平台逻辑被组件隐藏了。

0 投票
1 回答
267 浏览

android - 如何在 Android Q 中复制外部存储中的文件

我制作了一个没有 UI 的应用程序(称为 A),它通过 AIDL 向其他客户端应用程序提供了一些信息。

所以我想制作一个 UI 应用程序(称为 B)来显示 A 应用程序状态并将一些文件发送到服务器(日志、数据库等)。

但是,我在使用 Android Q 中的 Scoped Storage 时遇到了一些问题。

(我知道android:requestLegacyExternalStorage="true"但我不想使用这个技巧)

我正在寻找 MediaStore 和 SAF(存储访问框架),但我不确定哪个是正确的以及更多(我没想到的)

我可以使用 MediaStore 将数据库文件复制到外部存储(其他应用程序的实际公共空间)吗?即使 App A 没有任何 UI,我也可以使用 SAF 吗?(如何?)

谢谢你帮助我。

0 投票
2 回答
525 浏览

android - 通过在具有目标 SDK 29 的 Android 10 上启用旧版外部存储,究竟选择退出范围存储

在面向 SDK 29 时,可以选择选择范围存储。通过在清单文件中添加 android:requestLegacyExternalStorage="true" 来启用旧存储。我的应用程序的现有功能无法在 Android 10 上运行。

例如

  1. 无法访问公共目录 getExternalStorageDirectory()
  2. 无法调用 mkdir() 方法
  3. 无法通过 DownloadManager 等下载文件。

我想知道通过启用旧版外部存储从范围存储中选择退出的确切内容。

因为根据我的理解,我们仍然必须在 android 10 上使用新的外部存储分类。

存储路径的 DownloadManager 代码片段:

清单应用程序标签:

0 投票
1 回答
352 浏览

android - 从 Android 中的 MediaStore 获取视频内容时,光标返回 0

我正在尝试从 Android 11 中的 MediaStore.Video 检索视频内容。光标返回“0”,代码如下。我在清单文件中添加了 READ_EXTERNAL_STORAGE 权限,并在访问以下代码之前在活动中添加了运行时权限检查。您能帮我如何从 Android 11 的 MediaStore.Video 提供程序中的所有视频中获取名称、持续时间、大小字段吗?

0 投票
0 回答
159 浏览

android - 将应用程序从 28 定位到 29 后的 Android 下载管理器 - setDestinationInExternalPublicDir() - 不是标准目录之一:MyDir/videos/

我在 Play 商店中有应用程序,目标版本为 28。在应用程序中,我使用了下载管理器,它将文件下载到自定义目录。现在根据 Play 商店要求政策,应用程序目标版本应更新为 29。因此,我已更新为 29,但之后当我尝试下载文件时,下载管理器在Android 10(Q)中出现以下错误。

不是标准目录之一:MyDir/videos/

我已经阅读了一些解决方案,发现它只允许存储在公共目录中,如 DIRECTORY_DOWNLOADS、DIRECTORY_DCIM 等。但问题是,在当前的实时应用程序中,它从存储用户当前下载数据的 MyDir/videos/ 读取,如果我将路径更改为会导致很多问题的其他目录。所以我正在寻找解决方案,使用它我可以在与当前实时版本相同的自定义目录中下载文件。我附上了我在应用程序中用于下载文件的代码。

代码: