Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:如何使用ContentProvider使用DownloadManager将文件下载到内部存储?_Java_Android_File_Android Contentprovider_Android Download Manager - Fatal编程技术网

Java Android:如何使用ContentProvider使用DownloadManager将文件下载到内部存储?

Java Android:如何使用ContentProvider使用DownloadManager将文件下载到内部存储?,java,android,file,android-contentprovider,android-download-manager,Java,Android,File,Android Contentprovider,Android Download Manager,我正在尝试使用所述的(请参阅选项2)将单个巨大的zip文件下载到内部存储器: 创建DownloadManager可以写入的ContentProvider,并为其提供与此ContentProvider对应的URI 有人能给我举个例子说明如何做到这一点吗?这就是我想要达到的目标吗 还是这样做完全是个坏主意?您发布的答案提到了几个场景: 在您希望下载此文件的位置,如果您使用下载管理器,它肯定会被视为公共下载,其他应用程序可以访问它 如果您希望它是特定于应用程序上下文的内部存储,那么可以通过任何可能的方

我正在尝试使用所述的(请参阅选项2)将单个巨大的zip文件下载到内部存储器:

创建DownloadManager可以写入的ContentProvider,并为其提供与此ContentProvider对应的URI

有人能给我举个例子说明如何做到这一点吗?这就是我想要达到的目标吗


还是这样做完全是个坏主意?

您发布的答案提到了几个场景:

  • 在您希望下载此文件的位置,如果您使用下载管理器,它肯定会被视为公共下载,其他应用程序可以访问它
  • 如果您希望它是特定于应用程序上下文的内部存储,那么可以通过任何可能的方法下载它,正如海报建议的那样使用ContentProvider
  • 现在进一步补充,无论您选择何种方法,下载数据的代码都将保持不变。也许我会建议一个更合适的解决方案,因为ContentProvider通常与处理数据库相关,所以请放弃它

  • 创建一个服务,它将在后台运行
  • 通过该服务生成一个用于下载数据的线程,这一点非常重要,无论您使用哪种方法,但如果您尝试通过主线程钩住任何长网络操作,android将关闭您的应用程序,在主线程或ANR上声明网络
  • 下载完成后,你可以停止你的服务,并从那里做任何你想做的事情
  • 下载以下文件的精彩代码以及power Manager等的使用可在此处找到:


    但如何像DownloadManager那样跨多个系统重新启动处理下载?您可以采用各种机制,比如首选一个标志“下载初始未完成”,如果下载成功,则将其标记为“下载完成”,现在,如果应用程序突然关闭或下载失败,您可以随时通过此首选项检查下载状态,然后决定wthr是否再次开始下载服务。确定,但它是一个大约200 MB的文件。如果下载没有完成,有没有办法恢复而不是重新启动?这是核心问题。我需要在系统重新启动后启动服务,但这应该是可能的。(请参阅)重新启动服务是小菜一碟,无论是设备重新启动还是服务突然停止,您上面发布的链接都有使服务持久化的详细信息。这将帮助您实现恢复逻辑。OK。非常感谢你!现在我可以解决这个问题了。