【问题标题】:Download to internal memory possible?可以下载到内存吗?
【发布时间】:2011-06-27 14:41:41
【问题描述】:

我正在使用downloadmanager.request enqueue setDestinationUri 下载文件。

是否可以将文件下载到内存位置 可以持久化的设备?

我使用的是 Android 3.1 Xoom 设备,但它实际上并没有 虽然应用程序允许我们写入 /mnt/ SD卡位置。

有什么方法可以将下载的文件存储到内存中?

TIA

【问题讨论】:

  • 蜂窝设备上的 /sdcard 无论如何都不会写入内部存储器吗?这不是你想要的吗?
  • 我不认为 /mnt/sdcard 有资格作为内部存储器。该位置的绝对路径由 Environment.getExternalStorageDirectory().getAbsolutePath() 给出,很明显它是 External
  • 我的意思是 xoom(和其他 HC 设备)将 /sdcard 映射到内部 16 或 32GB 内存中的某个点,作为期望存在 sd 卡的应用程序的解决方法。对于应用程序来说,它看起来像是在 sdcard 上,但在内部,它实际上是写入到内部闪存中。
  • @maxpower47。我知道了。摩托罗拉修复 SD 卡问题后会发生什么?
  • 即使主板上的 SD 卡插槽已启用,当前与 Xoom 的排列也不会改变。如果启用了 SD 卡插槽,则该 SD 卡将映射到不同的路径。我还要注意,像 Nexus S 这样没有 SD 卡的手机将 /sdcard 映射到内部分区。在 /sdcard 中有可写的东西是 Android CDD 的要求。

标签: android


【解决方案1】:

DownloadManager 不太可能做到这一点。我的假设是 DownloadManager 不在您的进程中运行,而是在系统控制的另一个进程中运行。内部存储位置受权限保护,您提供的任何位置都只能由您的应用程序访问。

看来你有两个选择。

(1) 提供“外部”存储上的文件路径,完成后复制到内部存储,然后删除外部存储上的文件。

(2) 创建DownloadManager 可以写入的ContentProvider,并为其提供与此ContentProvider 对应的URI。您实现的ContentProvider 可以将文件写入内部存储,因为它将在您的应用程序的上下文中运行。

【讨论】:

  • @cyngus:你能举一个选项 2 的例子吗?
  • 第二种方法不起作用,因为 DownloadManager.Request 只接受 file:// 方案 URI。
  • 如果你使用FileProvider,那么DownloadManager 将崩溃并出现异常java.lang.IllegalArgumentException: Not a file URI: content://your_file_provider_authotrity/file_path 因为DownloadManager 使用file:// 方案来访问文件,并且FileProvider 会给你URI wil 方案content://跨度>
  • @cyngus 如果您可以确认并更新您的答案,那么这将对未来的读者有所帮助。
  • @prostock 不,我无法让它工作。我不得不求助于第一种方法。
猜你喜欢
  • 2016-02-27
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多