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下载查询状态的按钮,以触发查询事件,在此不再展开赘述。

相关文章
|
4月前
|
开发工具 Android开发 开发者
Android Studio详细下载,安装使用教程
Android Studio详细下载,安装使用教程
297 0
|
4月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
131 0
|
1月前
|
Shell 开发工具 Android开发
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
451 2
|
1月前
|
Android开发 对象存储
OSS对象储存android开发进行下载到本地文件时异步操作失效
android vivo80使用官方示例代码进行文件下载,但是使用oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>()时onSuccess和onFailure不执行
|
7月前
|
开发工具 Android开发
Android平台GB28181设备接入端预置位查询(PresetQuery)探讨和技术实现
之前blog介绍了GB28181云台控制(PTZCmd)相关,本文主要是介绍下GB28181预置位查询。
|
8月前
|
Android开发
Android 中ProgressDialog进度条对话框的使用(使用子线程模拟更新进度)
Android 中ProgressDialog进度条对话框的使用(使用子线程模拟更新进度)
99 0
|
4月前
|
XML Java Android开发
Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)
Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)
94 0
|
4月前
|
缓存 IDE Java
应用研发平台EMAS中classpath 'com.aliyun.ams:alicloud-android-networkmonitor-plugin:1.3.0-open'这个一直下载不成功,这个需要怎么处理?
应用研发平台EMAS中classpath 'com.aliyun.ams:alicloud-android-networkmonitor-plugin:1.3.0-open'这个一直下载不成功,这个需要怎么处理?
51 1
|
8月前
|
Linux 开发工具 Android开发
Android Studio 安装教程 下载最新版 Windows(详细步骤)2021.2.1版本最新版
Android Studio 安装教程 下载最新版 Windows(详细步骤)2021.2.1版本最新版
|
8月前
|
Android开发
Android中 Download Manager系统下载管理器在Android 10系统中无法使用的情况
Android中 Download Manager系统下载管理器在Android 10系统中无法使用的情况
234 0