【问题标题】:getExternalStoragePublicDirectory deprecated in Android Q. How to save document file into public directory?getExternalStoragePublicDirectory 在 Android 中已弃用 Q. 如何将文档文件保存到公共目录中?
【发布时间】:2019-09-28 13:26:18
【问题描述】:

我想访问公共目录文件,而不是存储:图像、音频和视频! 我需要存储:文档(例如:doc、pdf、bak、zip 等...)。 即使在我的应用程序被卸载后,我也需要这些文件应该保留在用户设备上。我需要用户可以从其他应用程序访问这些文档文件。

在android的早期版本中,对于documents文件夹,我可以简单地写下一行:

File myDirectory = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOCUMENTS), "My documents");
if (!myDirectory.exists()) {
   if(myDirectory.mkdirs()){
      // directory exists, can place any files here                
   }
}

如何在 android Q 中做到这一点? 或者没办法,我只需要告诉我的用户我的应用根本不支持 Android 10?

附言 我看到这个: getExternalStoragePublicDirectory deprecated in Android Q - 我的问题没有答案

【问题讨论】:

    标签: android


    【解决方案1】:

    如何在 android Q 中做到这一点?

    使用ACTION_CREATE_DOCUMENT 允许用户选择一个位置,然后将您的内容存储在您获得的Uri 中。

    或者,使用ACTION_OPEN_DOCUMENT_TREE 允许用户选择树(例如,目录)。您可以使用通过DocumentFile.fromTreeUri() 返回的Uri 来创建子文档。在每种情况下,您都会得到一个Uri,您可以使用它来存储内容。

    给定Uri,您可以使用ContentResolveropenOutputStream() 将内容写入Uri 标识的位置。

    This sample Java app(和its Kotlin counterpart)演示如何处理文件和内容Uri 值。我使用ACTION_OPEN_DOCUMENT 允许用户选择现有的文本文件或ACTION_CREATE_DOCUMENT 允许用户创建一个新的文本文件。

    【讨论】:

    • 我可以在不向用户请求其他 UI 对话框的情况下执行此操作吗?
    • @RussiaDroneFlights:不,抱歉。这些变化背后的意义在于让用户负责存储。
    • 这是一场灾难 :-((((
    • ...就像在我的电脑上一样:我用记事本将 txt 文件保存在一个文件夹中。并且无法打开它,例如用写字板、word 等……这是完全令人难以置信的情况。
    • @RussiaDroneFlights:“我用记事本将 txt 文件保存在一个文件夹中”——最后我检查了一下,Windows 记事本程序使用“文件保存”对话框允许用户选择保存文件的位置以及如何称呼它。这就是ACTION_CREATE_DOCUMENT 所做的。 “并且无法使用写字板、word 等打开它。”——最后我检查了一下,这些程序使用“文件打开”对话框来允许用户选择要打开的文档。这就是ACTION_OPEN_DOCUMENT 所做的。
    猜你喜欢
    • 2015-03-18
    • 2020-10-11
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多