Android DownloadManager下载进度查询(系列3)

简介: Android DownloadManager下载进度查询(系列3)我在之前写了写一些关于Android DownloadManager 的文章:(系列1)《Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)》文章链接地址:http://blog.


Android DownloadManager下载进度查询(系列3)


我在之前写了写一些关于Android DownloadManager 的文章:
(系列1)《Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)》文章链接地址:http://blog.csdn.net/zhangphil/article/details/48949027
(系列2)《Android DownloadManager下载状态查询(2)》文章链接地址:http://blog.csdn.net/zhangphil/article/details/48976427

文章(1)简单介绍了Android DownloadManager的基础使用方法,文章(2)是Android DownloadManager得基础下载状态查询。本文是在前两篇文章的基础上写作而成,本篇文章主要介绍如何查询Android DownloadManager某一个下载任务下载进度,比如,使用Android DownloadManager下载某一个大文件,在某时某刻需要查询该文件已经下载多少字节。
测试的MainActivity.java:

package zhangphil.demo;

import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.DownloadManager.Request;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

	private DownloadManager downloadManager;
	private long Id;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				query();
			}
		});

		downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

		// 假设从这一个链接下载一个大文件。
		Request request = new Request(
				Uri.parse("http://apkc.mumayi.com/2015/03/06/92/927937/xingxiangyi_V3.1.3_mumayi_00169.apk"));

		// 仅允许在WIFI连接情况下下载
		request.setAllowedNetworkTypes(Request.NETWORK_WIFI);

		// 通知栏中将出现的内容
		request.setTitle("我的下载");
		request.setDescription("下载一个大文件");
		// 下载过程和下载完成后通知栏有通知消息。
		request.setNotificationVisibility(Request.VISIBILITY_VISIBLE | Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

		// 此处可以由开发者自己指定一个文件存放下载文件。
		// 如果不指定则Android将使用系统默认的
		// request.setDestinationUri(Uri.fromFile(new File("")));

		// 默认的Android系统下载存储目录
		request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my.apk");

		// enqueue 开始启动下载...
		Id = downloadManager.enqueue(request);
	}

	// 查询下载进度,文件总大小多少,已经下载多少?
	private void query() {
		Query downloadQuery = new Query();
		downloadQuery.setFilterById(Id);
		Cursor cursor = downloadManager.query(downloadQuery);
		if (cursor != null && cursor.moveToFirst()) {
			int fileName = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
			int fileUri = cursor.getColumnIndex(DownloadManager.COLUMN_URI);
			String fn = cursor.getString(fileName);
			String fu = cursor.getString(fileUri);

			int totalSizeBytesIndex = cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
			int bytesDownloadSoFarIndex = cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);

			// 下载的文件总大小
			int totalSizeBytes = cursor.getInt(totalSizeBytesIndex);

			// 截止目前已经下载的文件总大小
			int bytesDownloadSoFar = cursor.getInt(bytesDownloadSoFarIndex);

			Log.d(this.getClass().getName(),
					"from " + fu + " 下载到本地 " + fn + " 文件总大小:" + totalSizeBytes + " 已经下载:" + bytesDownloadSoFar);

			cursor.close();
		}
	}
}


MainActivity.java依赖的activity_main.xml文件代码里面仅仅含有一个button下载查询状态的按钮,以触发查询事件,在此不再展开赘述。

相关文章
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
302 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
3月前
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
49 2
|
5月前
|
API 开发工具 Android开发
Android源码下载
Android源码下载
611 0
|
5月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
671 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
5月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
164 0
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
270 0
|
8月前
|
敏捷开发 Java 机器人
云效产品使用常见问题之打包后的Android应用获取下载地址失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
网络协议 Android开发 开发工具
国内常用的Android镜像下载地址(附教育网主要镜像站)
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ Android developer 最新国内镜像:http://wear.
21612 0
|
Android开发
Android Studio下载Gradle一直失败,使用正确的下载地址
Android Studio下载Gradle一直失败,使用正确的下载地址
1116 0