Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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 使用DownloadManager从应用程序内下载大文件到特定目录_Java_Android_Download Manager - Fatal编程技术网

Java 使用DownloadManager从应用程序内下载大文件到特定目录

Java 使用DownloadManager从应用程序内下载大文件到特定目录,java,android,download-manager,Java,Android,Download Manager,我有一个应用程序,需要能够下载一个~3GB的文件到用户指定的位置,我目前有下面的代码,这似乎是可行的。 i、 e下载发生时,它会显示在下载管理器中等 但是,一旦下载完成,它就无法显示在正确的位置,而且空间根本没有被占用 这是我当前的代码: public void file_download(String uRl) { install_txt = AppPreferences.getPrefs().getString( "path",

我有一个应用程序,需要能够下载一个~3GB的文件到用户指定的位置,我目前有下面的代码,这似乎是可行的。 i、 e下载发生时,它会显示在下载管理器中等

但是,一旦下载完成,它就无法显示在正确的位置,而且空间根本没有被占用

这是我当前的代码:

 public void file_download(String uRl) {
install_txt = AppPreferences.getPrefs().getString(
                "path",
                Environment.getExternalStorageDirectory().getPath()
                + "/test.img");

            DownloadManager mgr = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);

            Uri downloadUri = Uri.parse(uRl);
            DownloadManager.Request request = new DownloadManager.Request(
                    downloadUri);

            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
                    .setAllowedOverRoaming(false).setTitle("test")
                    .setDescription("Downloading test")
                    .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS , install_txt);

            mgr.enqueue(request);
        }
因此,我的问题是,为什么上述方法不能很好地发挥作用?或者只是下载管理器很难下载如此大的文件? 如果是这样的话,有没有更好的方法可以可靠地下载这么大的文件

下载完成后,日志中显示以下内容

07-19 13:19:28.112: W/DownloadManager(19199): Exception for id 8952: Invalid int: "3891000000"
07-19 13:19:28.112: W/DownloadManager(19199): java.lang.NumberFormatException: Invalid int: "3891000000"
07-19 13:19:28.112: W/DownloadManager(19199):   at java.lang.Integer.invalidInt(Integer.java:138)
07-19 13:19:28.112: W/DownloadManager(19199):   at java.lang.Integer.parse(Integer.java:378)
07-19 13:19:28.112: W/DownloadManager(19199):   at java.lang.Integer.parseInt(Integer.java:366)
07-19 13:19:28.112: W/DownloadManager(19199):   at java.lang.Integer.parseInt(Integer.java:332)
07-19 13:19:28.112: W/DownloadManager(19199):   at com.android.providers.downloads.DownloadThread.handleEndOfStream(DownloadThread.java:516)
07-19 13:19:28.112: W/DownloadManager(19199):   at com.android.providers.downloads.DownloadThread.transferData(DownloadThread.java:314)
07-19 13:19:28.112: W/DownloadManager(19199):   at com.android.providers.downloads.DownloadThread.executeDownload(DownloadThread.java:278)
07-19 13:19:28.112: W/DownloadManager(19199):   at com.android.providers.downloads.DownloadThread.runInternal(DownloadThread.java:193)
07-19 13:19:28.112: W/DownloadManager(19199):   at com.android.providers.downloads.DownloadThread.run(DownloadThread.java:142)

该错误消息表明,
DownloadManager
目前仅限于2147483647(
Integer.MAX_VALUE
)字节或更小的文件

已经有人对此提出申请,谷歌目前没有回应


同时,我想看看您是否可以安排将~3GB的文件拆分为两个较小的文件。如果没有,您可能需要自己下载。

较小的文件可以吗?你有理由确定这只是大文件的问题吗?@KenWolf是的,较小的文件似乎可以正常工作谢谢-你确定设备上有足够的空间吗?@KenWolf是的,我在运行上述函数之前检查了可用空间,在我的测试设备上,我有10GB的可用空间来确保你的
setDestinationNexternalPublicDir()
调用是奇怪的。您的代码意味着
install_txt
的默认值类似于
/mnt/sdcard/test.img
,这是一组非常奇怪的子目录,需要放在用户的
下载
目录中。除此之外,您是否尝试过通过任何其他方式(如DDMS或
adb push
)将3GB文件放在所需位置?谢谢,您必须考虑拆分文件