下载到内部存储器是否可行?

16

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

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

我正在使用Android 3.1 Xoom设备,虽然该应用程序允许我们写入/mnt/sdcard位置,但它实际上并没有一个功能性的SD卡。

是否有方法将下载的文件存储到内部存储器中?

TIA


Honeycomb设备上的/sdcard不是写入内部存储器吗?这难道不是你想要的吗? - maxpower47
2
我认为/mnt/sdcard不符合内部存储的条件。该位置的绝对路径由Environment.getExternalStorageDirectory().getAbsolutePath()给出,很明显它是外部的。 - VJ Vélan Solutions
我想说的是,xoom(以及其他HC设备)将/sdcard映射到内部16或32GB存储器中的一个点,作为对期望存在sdcard的应用程序的解决方法。对于应用程序来说,它看起来像是在sdcard上,但实际上,它是写入到内部闪存中的。 - maxpower47
@maxpower47。我明白了。如果Motorola解决了SD卡问题会发生什么? - VJ Vélan Solutions
当前与Xoom的安排不会改变,即使启用了主板上的SD卡插槽。如果启用了SD卡插槽,该SD卡将被映射到不同的路径。我还要注意的是,像Nexus S这样没有SD卡的手机,/sdcard被映射到一个内部分区。在Android CDD中,具有可写 /sdcard 的内容是必需的。 - cyngus
显示剩余2条评论
1个回答

20

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

看起来您有两个选择。

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

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


2
@cyngus:你能举一个选项2的例子吗? - RvdK
3
第二种方法行不通,因为DownloadManager.Request只接受file://协议的URI。 - pepyakin
1
如果您使用FileProvider,那么DownloadManager将会崩溃,并且抛出异常java.lang.IllegalArgumentException:Not a file URI:content://your_file_provider_authotrity/file_path。因为DownloadManager使用file://方案访问文件,而FileProvider则会给您一个具有content://方案的URI。 - Kalpesh Patel
6
如果您可以确认并更新您的答案,那么对于未来的读者将会很有帮助。 - Kalpesh Patel
1
@prostock 我没有能够让它工作。我不得不采取第一种方法。 - Kalpesh Patel
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接