android - 当我从另一个活动返回时,如何在 RecyclerView 中的多个视频的进度栏中显示“正在下载”?
问题描述
我有一个 ListView,其中包含一个视频列表,单击下载视频按钮,在圆形进度条中显示下载进度。如果我点击一个数字视频进行下载,那么它将开始显示进度。但是当我点击另一个活动并回到同一个活动时,进度条中不显示剩余进度,也不会出现。
我应该怎么做才能在我之前单击的 ListView 中看到剩余的视频进度?我使用下载管理器下载视频并在进度条中显示进度。
我想要 WhatsApp 中使用的相同功能;如果您单击视频,它会显示下载进度以及在您重新访问该页面后。
解决方案
我们必须将 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;
}`
推荐阅读
- akka - Thingsboard 中的演员模型
- android - 如何使用rest api调用单击上一个按钮后保持复选框状态
- c# - Linq 除了忽略自定义比较器?
- sql - 内部联接查询不检索最新结果
- node.js - 如何通过聚合加入 3 个集合?
- visual-studio-2017 - Visual Studio 2017 社区版 - Nuget.exe 未找到
- python - 多个外键上的 SQLAlchemy 双内连接
- c# - Mainwindow.xaml 打开时无法设计,但仍从工具箱中删除项目
- docker - 运行 netcore-react 应用程序时出现 docker-compose 错误
- r - 使用 R tmap 包在 2 行中绘制 3 个地图