Android 什么';将大文件下载到内部存储器的最佳方式是什么,其行为类似于DownloadManager请求?

Android 什么';将大文件下载到内部存储器的最佳方式是什么,其行为类似于DownloadManager请求?,android,android-asynctask,android-download-manager,Android,Android Asynctask,Android Download Manager,我目前正在使用DownloadManager通过我的应用程序将~20mb的CSV下载到外部存储,这需要Write_外部权限。我希望能够将此CSV下载到我的应用程序的内部存储(因此我不需要该权限和内部存储始终可用的保证),但DownloadManager无法执行此操作/访问我的应用程序的存储 我知道我可以使用AsyncTask或下载服务来完成这项工作,但我喜欢DownloadManager的行为方式,即: 当用户脱机启动internet连接后重新连接时,将自动启动下载 它自动处理暂停、恢复和重试

我目前正在使用DownloadManager通过我的应用程序将~20mb的CSV下载到外部存储,这需要Write_外部权限。我希望能够将此CSV下载到我的应用程序的内部存储(因此我不需要该权限和内部存储始终可用的保证),但DownloadManager无法执行此操作/访问我的应用程序的存储

我知道我可以使用AsyncTask或下载服务来完成这项工作,但我喜欢DownloadManager的行为方式,即:

  • 当用户脱机启动internet连接后重新连接时,将自动启动下载
  • 它自动处理暂停、恢复和重试下载

我可以通过AsyncTask、服务甚至第三方库来实现这一点吗?

“但是DownloadManager无法做到这一点/访问我的应用程序的存储”--可能是通过
文件提供程序来实现的,尽管我还没有尝试过这一点。@Commonware根据注释文件提供程序的不起作用:“由于DownloadManager使用file://scheme访问该文件,FileProvider将向您提供URI wil scheme作为内容://“好吧,该死。我想把这个地址写下来。对于20MB的下载,不要使用
AsyncTask
,因为下载可能需要相当长的时间。当您正在积极下载时,
IntentService
将是一个不错的选择。但是,我不确定是否有任何HTTP客户端库使暂停/恢复/重试非常容易。连接管理最好通过
作业调度程序
来处理。我宁愿让DownloadManager来完成这项工作,然后将文件移动到您需要的地方。@Rediska但这不需要写权限吗?