下载的文件会自动删除

Sag*_*gar 7 android android-file android-download-manager

在我的应用程序中,有一些用户可以下载的文件.文件通过android下载管理器下载.但是,几周以来,数百名用户一直在抱怨他们的文件每8-12天自动删除一次,甚至没有他们卸载应用程序.(可能会有更多用户不愿意抱怨同样的问题.)

现在,可能存在许多用户特定的原因,为什么会在少数设备上发生这种情况.但考虑到大量的用户,似乎我可能做错了什么.

为什么系统/下载管理器会自动删除文件?有没有办法通知系统或下载管理器不删除某些文件?或者我应该在下载后重新命名文件,以便将它们与下载管理器取消链接,并希望问题能够解决?

编辑:

这是我用来下载文件的代码:

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(trackLink));
request.setTitle(trackTitle);
request.setDestinationInExternalPublicDir("Tracks", trackTitle + ".mp3");
request.setVisibleInDownloadsUi(false);
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
Run Code Online (Sandbox Code Playgroud)

use*_*486 7

我也遇到过这个问题.查看源代码DownloadIdleService似乎如果下载设置为在UI中不可见,则会在7天后将其删除,因为它们被视为"陈旧".这是来自的javadoc DownloadIdleService:

/**
 * Remove stale downloads that third-party apps probably forgot about. We
 * only consider non-visible downloads that haven't been touched in over a
 * week.
 */
Run Code Online (Sandbox Code Playgroud)

https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/master/src/com/android/providers/downloads/DownloadIdleService.java#110

  • 最好的选择是使用一个临时文件名进行下载,并在下载完成后将其重命名。 (2认同)

Mat*_*ski 6

从 Android Q 开始存在一个更大的问题,其中setVisibleInDownloadsUi设置的值被忽略,默认情况下为 false。这些文件将在一周后被删除。您可以通过以下方式进行测试:下载文件,将日历中的日期更改 2 个月,例如,在终端中调用:

adb shell cmd jobscheduler run -f com.android.providers.downloads -100

它从DownloadIdleService开始工作,其中旧的和禁止的文件被删除。您可以在 logcat(未设置过滤器)中看到 DownloadManager 尝试删除您的文件。

为了防止这种情况,您可以:

  • 下载文件到Environment#getExternalStoragePublicDirectory(String) with Environment#DIRECTORY_DOWNLOADS)- 这是从 Android Q 开始的唯一路径,下载可见且不应删除
  • 下载后更改文件名(例如在 DownloadedReceiver 中)