Android DownloadManager下载状态查询(2)

简介: Android DownloadManager下载状态查询(2)在我写的前一篇文章中,《Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)》文章链接地址:http://blog.csdn.net/zhangphil/article/details/48949027大致简介了Android DownloadManager如何完成一个下载任务。


Android DownloadManager下载状态查询(2)

在我写的前一篇文章中,
《Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)》
文章链接地址:http://blog.csdn.net/zhangphil/article/details/48949027
大致简介了Android DownloadManager如何完成一个下载任务。这篇文章在前一篇文章的基础上,做一些小改动,增加对下载任务状态的查询。
现在给出全部源代码。
MainActivity.java文件:

package zhangphil.demo;

import android.app.Activity;
import android.app.DownloadManager;
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.view.View;
import android.widget.Button;
import android.widget.Toast;

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) {
				// remove将依据Id号取消相应的下载任务
				// 可批量取消,remove(id1,id2,id3,id4,...);
				downloadManager.remove(Id);
			}
		});

		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);

		Button queryButton = (Button) findViewById(R.id.queryButton);
		queryButton.setOnClickListener(new View.OnClickListener() {

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

	// 根据DownloadManager下载的Id,查询DownloadManager某个Id的下载任务状态。
	private void queryStatus() {
		DownloadManager.Query query = new DownloadManager.Query();
		query.setFilterById(Id);
		Cursor cursor = downloadManager.query(query);

		String statusMsg = "";
		if (cursor.moveToFirst()) {
			int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
			switch (status) {
			case DownloadManager.STATUS_PAUSED:
				statusMsg = "STATUS_PAUSED";
			case DownloadManager.STATUS_PENDING:
				statusMsg = "STATUS_PENDING";
			case DownloadManager.STATUS_RUNNING:
				statusMsg = "STATUS_RUNNING";
				break;
			case DownloadManager.STATUS_SUCCESSFUL:
				statusMsg = "STATUS_SUCCESSFUL";
				break;
			case DownloadManager.STATUS_FAILED:
				statusMsg = "STATUS_FAILED";
				break;

			default:
				statusMsg = "未知状态";
				break;
			}

			Toast.makeText(getApplicationContext(), statusMsg, Toast.LENGTH_SHORT).show();
		}
	}
}


MainActivity.java需要的布局文件activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消下载" />

    <Button
        android:id="@+id/queryButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询下载状态" />

</LinearLayout>


相关文章
|
4月前
|
开发工具 Android开发 开发者
Android Studio详细下载,安装使用教程
Android Studio详细下载,安装使用教程
297 0
|
4月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
130 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预置位查询。
|
4月前
|
XML Java Android开发
Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)
Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)
93 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
|
9月前
|
Android开发
王者荣耀安卓区修改荣耀战区方法 | 最低战力查询(附带视频与安装包)
王者荣耀安卓区修改荣耀战区方法 | 最低战力查询(附带视频与安装包)
150 0