首页 > 解决方案 > 当我从另一个活动返回时,如何在 RecyclerView 中的多个视频的进度栏中显示“正在下载”?

问题描述

我有一个 ListView,其中包含一个视频列表,单击下载视频按钮,在圆形进度条中显示下载进度。如果我点击一个数字视频进行下载,那么它将开始显示进度。但是当我点击另一个活动并回到同一个活动时,进度条中不显示剩余进度,也不会出现。

我应该怎么做才能在我之前单击的 ListView 中看到剩余的视频进度?我使用下载管理器下载视频并在进度条中显示进度。

我想要 WhatsApp 中使用的相同功能;如果您单击视频,它会显示下载进度以及在您重新访问该页面后。

标签: androidandroid-progressbar

解决方案


我们必须将 downloadId 保存在本地数据库中。`DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager.Request 请求 = 新的 DownloadManager.Request(Uri.parse(strUrl)); request.allowScanningByMediaScanner(); request.setTitle(strDownloadFileName); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, strDownloadFileName); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); long downloadId = manager.enqueue(request);

                                databaseHelper.insertProgress(positionItem,downloadId);'

创建针对 downloadId 获取进度的函数`private int getProgressFromDownloadID(long donloadId){

    DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
    DownloadManager.Query q = new DownloadManager.Query();
    q.setFilterById(donloadId);

    Cursor  cursor = manager.query(q);
    cursor.moveToFirst();
    int bytes_downloaded = cursor.getInt(cursor
            .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
    int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

    if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {

    }

    int dl_progress = (int) ((double)bytes_downloaded / (double)bytes_total * 100f);

    return dl_progress;
}`

推荐阅读