Android DownloadManager下载状态查询(2)

2023-12-22 22:32

本文主要是介绍Android DownloadManager下载状态查询(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



Android DownloadManager下载状态查询(2)

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

[java]  view plain copy
  1. package zhangphil.demo;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.DownloadManager;  
  5. import android.app.DownloadManager.Request;  
  6. import android.content.Context;  
  7. import android.database.Cursor;  
  8. import android.net.Uri;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.view.View;  
  12. import android.widget.Button;  
  13. import android.widget.Toast;  
  14.   
  15. public class MainActivity extends Activity {  
  16.   
  17.     private DownloadManager downloadManager;  
  18.     private long Id;  
  19.   
  20.     @Override  
  21.     protected void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.activity_main);  
  24.         Button button = (Button) findViewById(R.id.button);  
  25.         button.setOnClickListener(new View.OnClickListener() {  
  26.   
  27.             @Override  
  28.             public void onClick(View v) {  
  29.                 // remove将依据Id号取消相应的下载任务  
  30.                 // 可批量取消,remove(id1,id2,id3,id4,...);  
  31.                 downloadManager.remove(Id);  
  32.             }  
  33.         });  
  34.   
  35.         downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);  
  36.   
  37.         // 假设从这一个链接下载一个大文件。  
  38.         Request request = new Request(  
  39.                 Uri.parse("http://apkc.mumayi.com/2015/03/06/92/927937/xingxiangyi_V3.1.3_mumayi_00169.apk"));  
  40.   
  41.         // 仅允许在WIFI连接情况下下载  
  42.         request.setAllowedNetworkTypes(Request.NETWORK_WIFI);  
  43.   
  44.         // 通知栏中将出现的内容  
  45.         request.setTitle("我的下载");  
  46.         request.setDescription("下载一个大文件");  
  47.         // 下载过程和下载完成后通知栏有通知消息。  
  48.         request.setNotificationVisibility(Request.VISIBILITY_VISIBLE | Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);  
  49.   
  50.         // 此处可以由开发者自己指定一个文件存放下载文件。  
  51.         // 如果不指定则Android将使用系统默认的  
  52.         // request.setDestinationUri(Uri.fromFile(new File("")));  
  53.   
  54.         // 默认的Android系统下载存储目录  
  55.         request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my.apk");  
  56.   
  57.         // enqueue 开始启动下载...  
  58.         Id = downloadManager.enqueue(request);  
  59.   
  60.         Button queryButton = (Button) findViewById(R.id.queryButton);  
  61.         queryButton.setOnClickListener(new View.OnClickListener() {  
  62.   
  63.             @Override  
  64.             public void onClick(View v) {  
  65.                 queryStatus();  
  66.             }  
  67.         });  
  68.     }  
  69.   
  70.     // 根据DownloadManager下载的Id,查询DownloadManager某个Id的下载任务状态。  
  71.     private void queryStatus() {  
  72.         DownloadManager.Query query = new DownloadManager.Query();  
  73.         query.setFilterById(Id);  
  74.         Cursor cursor = downloadManager.query(query);  
  75.   
  76.         String statusMsg = "";  
  77.         if (cursor.moveToFirst()) {  
  78.             int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));  
  79.             switch (status) {  
  80.             case DownloadManager.STATUS_PAUSED:  
  81.                 statusMsg = "STATUS_PAUSED";  
  82.             case DownloadManager.STATUS_PENDING:  
  83.                 statusMsg = "STATUS_PENDING";  
  84.             case DownloadManager.STATUS_RUNNING:  
  85.                 statusMsg = "STATUS_RUNNING";  
  86.                 break;  
  87.             case DownloadManager.STATUS_SUCCESSFUL:  
  88.                 statusMsg = "STATUS_SUCCESSFUL";  
  89.                 break;  
  90.             case DownloadManager.STATUS_FAILED:  
  91.                 statusMsg = "STATUS_FAILED";  
  92.                 break;  
  93.   
  94.             default:  
  95.                 statusMsg = "未知状态";  
  96.                 break;  
  97.             }  
  98.   
  99.             Toast.makeText(getApplicationContext(), statusMsg, Toast.LENGTH_SHORT).show();  
  100.         }  
  101.     }  
  102. }  


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

[html]  view plain copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:id="@+id/LinearLayout1"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <Button  
  9.         android:id="@+id/button"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:text="取消下载" />  
  13.   
  14.     <Button  
  15.         android:id="@+id/queryButton"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:text="查询下载状态" />  
  19.   
  20. </LinearLayout>  

这篇关于Android DownloadManager下载状态查询(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525705

相关文章

Prometheus+cpolar如何在手机上也能监控服务器状态?

《Prometheus+cpolar如何在手机上也能监控服务器状态?》本文强调了通过Cpolar这一内网穿透工具,轻松突破Prometheus仅限于局域网访问的限制,实现外网随时随地访问监控数据,教你... 目录前言1.安装prometheus2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2