gpt4 book ai didi

android - 将文件写入 Android Q 中可公开访问的文档文件夹 - Scoped Storage

转载 作者:行者123 更新时间:2023-12-01 10:17:17 25 4
gpt4 key购买 nike

背景

迁移到 Android Q 后,我再也找不到合适的方法来获得对文档文件夹的写入权限 (/storage/emulated/0/Documents)

在任何人提到有关范围存储的许多其他问题之前,我已经阅读了其中的许多问题,并且从我目前所看到的情况来看,所有解决方案都使用特定于应用程序的目录或仅访问媒体目录(而不是文档文件夹访问)。

根据我对 Android Q 的了解,我可以选择:

  • 使用只能由我的应用程序(或我授予权限的应用程序)访问的应用程序特定目录
  • 允许用户选择他们想要存储文件的位置(我认为这可以是公共(public)位置)ACTION_OPEN_DOCUMENT_TREE

  • 问题

    我开发的应用程序用于对受试者进行测试,来自测试的数据会自动存储在可公开访问的 Documents 文件夹中,有点像: /storage/emulated/0/Documents/myAppName/subjectName/testData-todaysDate.pdf
    当用户想要访问测试数据时,他们将智能手机插入计算机并导航到文档文件夹,剩下的就很明显了。出于这个原因,我必须使用可公开访问的存储。还可以想象他们想通过另一个应用程序打开手机上的测试数据,同样的交易!

    我正在寻找的解决方案

    因此,我正在寻找的解决方案需要能够执行以下操作:
  • 不多次请求许可(一次即可)
  • 无需用户提示自动保存测试数据(因为将进行数百次测试)
  • 保存到公共(public)文档文件夹,例如/storage/emulated/0/Documents/
  • 不涉及用户选择目录,所以 NOT ACTION_OPEN_DOCUMENT_TREE
  • 理想情况下,数据是持久的,因此卸载应用程序不会导致数据丢失

  • 我知道 Android Q 中的这些变化是为了让用户更多地“了解”应用程序如何访问他们的数据,但是一旦他们了解您的应用程序如何使用您的数据,就不会有问题了。

    最佳答案

    仅适用于 Android Q。

    String collection = "content://media/1c11-2404/file"; // One can even write to micro SD card
    String relative_path = "Documents/MyFolder";

    Uri collectionUri = Uri.parse(collection);

    ContentValues contentValues = new ContentValues();

    contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, displayName);
    contentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
    contentValues.put(MediaStore.MediaColumns.SIZE, filesize);
    contentValues.put(MediaStore.MediaColumns.DATE_MODIFIED, modified );
    contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relative_path);
    contentValues.put(MediaStore.MediaColumns.IS_PENDING, 1)

    Uri fileUri = context.getContentResolver().insert(collectionUri, contentValues);

    拥有一个 uri 可以打开一个输出流来写入文件的内容。

    关于android - 将文件写入 Android Q 中可公开访问的文档文件夹 - Scoped Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60179299/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com