【问题标题】:I write a file to Environment.DIRECTORY_DOWNLOADS, why can't I see it via the Downloads App?我将文件写入 Environment.DIRECTORY_DOWNLOADS,为什么我无法通过下载应用程序看到它?
【发布时间】:2021-08-11 21:38:56
【问题描述】:

我在 Environment.DIRECTORY_DOWNLOADS 目录中写入(写入,而不是下载,确切地说是我的应用程序的 SQLite 数据库的转储)一个文件。

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File file = new File(path, "db.csv");

如果我用文件浏览器浏览手机,我可以正确看到文件中的文件

  /storage/emulated/0/Download

目录,以及其他下载。

但如果我打开下载应用程序,它不会显示...

我需要做什么才能让文件也显示在下载应用程序中?

【问题讨论】:

  • 您好,您的问题解决了吗?我遇到了同样的问题,如果你能分享解决方案,那就太好了。谢谢。

标签: android


【解决方案1】:

如果有人想知道如何做到这一点,我找到了答案here

为了让系统在“下载”应用中显示您的文件,您需要使用addCompletedDownload()方法明确通知DownloadManager下载已完成

通过使用它,系统将允许您的下载应用程序显示您自己创建的文件。

希望它会有所帮助。

UPDThis method was deprecated in API level 29.

【讨论】:

    【解决方案2】:

    下载应用只显示通过DownloadManager下载的下载,而不是目录中的所有文件。

    【讨论】:

    • 如何在Environment.DIRECTORY_DOWNLOADS找到我的下载文件
    • @mehmet:使用 DDMS。或者,使用 USB 电缆将设备的外部存储设备安装到计算机上。
    • 在 android 中没有,以编程方式
    • @Aniruddha:我不确定您在“下载”文件夹中的外观。请记住,下载的实际行为不是由DownloadManager 自己完成的。相反,它会向执行下载的单独系统应用程序发送一条消息,以便可以独立于您的应用程序继续进行。范围存储规则可能会使您的应用程序无法通过文件系统 API 看到下载,因为它是由另一个进程而不是您自己的进程下载的。就个人而言,我避免使用DownloadManager
    • @Aniruddha:“需要将文件保存在下载文件夹中,但不推荐使用 getExternalStoragePublicDirectory()”——对于“小于 29”,请使用 getExternalStoragePublicDirectory()。 “你为什么不使用下载管理器?” -- 因为DownloadManager 几乎没用。它不支持下载到internal storage 或用户选择的位置(例如,通过存储访问框架)。它的 API 很糟糕。那是人们似乎遇到DownloadManager 和范围存储的问题之前。
    【解决方案3】:

    你刚刚创建了类似的文件实例

    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    File file = new File(path, "db.csv");
    

    但文件“db.csv”尚未创建。使用

    file.createNewFile();
    

    创建文件“db.csv”真的...

    【讨论】:

    • 感谢 Gopal,文件已创建并显示在目录中,只是它没有像我预期的那样显示在下载应用程序中,因为我将它写在 Environment.DIRECTORY_DOWNLOADS 目录中。
    【解决方案4】:

    尝试设置 setVisibleInDownloadsUi 属性。
    这样就可以在“下载”应用中看到下载内容。
    Download.Manager

    UPDThis method was deprecated in API level 29.

    【讨论】:

      【解决方案5】:

      将您的文件添加到下载列表:

      DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
      dm.addCompletedDownload("db.csv", "my description", false, "text/csv", file.getAbsolutePath(), file.length(), false);
      

      【讨论】:

        【解决方案6】:

        如果你使用setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, fileName), 在/sdcard/Android/data/<package name>/files/Download 中查找文件。在模拟器中可以在Device File Explorer找到。

        如果您使用setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName),则可以在Files 应用程序的Download 文件夹中找到下载的文件。

        【讨论】:

          猜你喜欢
          • 2011-05-05
          • 2011-02-28
          • 2018-02-26
          • 2017-05-31
          • 2010-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多