当前位置: 首页 > 工具软件 > FAR Manager > 使用案例 >

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

蔺翰音
2023-12-01


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

转载于:https://my.oschina.net/zhangphil/blog/1601742

 类似资料: