当前位置: 首页 > 知识库问答 >
问题:

DownloadManager下载完成,但文件未存储

解柏
2023-03-14

我在DownloadManager时遇到了奇怪的问题,下载成功了,但文件没有存储。

这是我的代码:

try {
    DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
    request.setAllowedOverRoaming(false);
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
    request.setDestinationInExternalFilesDir(context, /temp/, "test.mp4");
    final long downloadId = manager.enqueue(request);
    boolean downloading = true;
    while (downloading) {
        DownloadManager.Query query = new DownloadManager.Query();
        query.setFilterById(downloadId);
        Cursor cursor = manager.query(query);
        cursor.moveToFirst();
        int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
        int bytesDownloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
        int bytesTotal = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
        if(status==DownloadManager.STATUS_SUCCESSFUL){
            Log.i("Progress", "success");
            downloading = false;
        }
        final int progress = (int) ((bytesDownloaded * 100l) / bytesTotal);
        cursor.close();
        subscriber.onNext(progress);
    }
    subscriber.onCompleted();
}catch (Exception e){
    subscriber.onError(e);
}

我的清单中也包含了write_external_storage。我尝试将目录更改为environment.directory_downloads,但是文件仍然没有存储到downloads目录。我试图在/android/data/ / 上找到它,但下载的文件也不在那里。那么我的代码出了什么问题?

共有1个答案

卢阳泽
2023-03-14

我也有这个问题,但当我改变时它解决了

    request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, videoName+".mp4");

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS.toString(), videoName+".mp4");

现在它保存在“下载”文件夹。

 类似资料:
  • 我设法用Selenium静默下载了文件。但是Firefox通过添加1、2、3自动重命名该文件。文件名,因为服务器发送的每个文件都具有相同的名称。但我想根据当前的日期和时间重命名文件。于是,试着: > 开始下载文件->DownloadLink.Click(); 而(不存在带有原始名称的文件或不存在 .part) · · { } 将下载的文件重命名为所需的名称。 但它会重命名一些文件。有些文件长度为0

  • 似乎MediaScanner想要扫描我告诉它不要扫描的文件。现在我想知道为什么。 我的应用程序从我的服务器下载多个媒体文件,并在稍后显示播放列表。 为此,该应用程序通过Android系统的DownloadManager获取媒体文件。 使用请求。setDestinationUri(),下载将保存到名为“挂起”的getExternalCacheDir()的子目录中。 下载完成后,Android Dow

  • 问题内容: 我正在尝试捕获下载完成事件,但是我的BroadcastReceiver没有收到它们。这是接收者: 这是清单: 有人知道怎么了吗? 问题答案: 为您的接收者使用完整的软件包名称,例如 Add 可以从其应用程序的来源接收消息。 更改的名称在以 仅当从您的应用程序使用进行注册时,才会触发接收器 要排队的代码下载:

  • 本文向大家介绍使用Android系统提供的DownloadManager来下载文件,包括了使用Android系统提供的DownloadManager来下载文件的使用技巧和注意事项,需要的朋友参考一下 在android2.3以后android系统提供了一个系统组件来供其他app调用来下载东西,使用起来非常方便。 例如我们可以拿来下载app的新版本apk,同时在同时注册一个广播接收器来接收下载完成时D

  • 问题内容: 我们一直在寻找答案,但是还没有找到解决方案。 我们有一个Web服务器,允许用户下载动态生成的文件(pdf),并通过servlet提供服务。我们想知道下载何时完成(以及如何:成功,失败,用户取消了吗?)。 没有用户输入,有没有办法知道这一点?这些文件相对较小,因此不需要进度条功能,但是我们需要某种“挂勾”功能,可以在下载完成后向您报告。这可能吗? [edit]浏览器端将具有什么功能来检测

  • 问题内容: 我需要从FTP读取CSV文件头。 由于这些文件可能非常庞大,因此我不需要下载它们。 有没有办法从FTP读取CSV文件的第一行并中止连接? 问题答案: 只需阅读第一行,忽略剩余内容并关闭流。智能FTP客户端不会在提供任何内容供读取之前将 整个 流缓冲在内存中。 假设您使用的是Apache Commons Net FTPClient: