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