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

Jul*_*lla 6 android download-manager android-download-manager

我遇到了奇怪的问题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);
}
Run Code Online (Sandbox Code Playgroud)

我也已包含WRITE_EXTERNAL_STORAGE在我的清单中。我尝试将目录更改为Environment.DIRECTORY_DOWNLOADS但文件仍未存储到下载目录。我试图找到它/Android/data/<my package>/,但下载的文件也不在那里。那么我的代码有什么问题吗?

附加:在日志中显示我的下载已完成。

在此输入图像描述

小智 7

我也遇到这个问题,不过我改了之后就解决了

    request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, videoName+".mp4");
Run Code Online (Sandbox Code Playgroud)

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS.toString(), videoName+".mp4");
Run Code Online (Sandbox Code Playgroud)

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