文档章节

DownloadManager(专门用来下载数据的一个类)的简单使用

初来小修
 初来小修
发布于 2016/02/21 12:27
字数 740
阅读 100
收藏 0

从Android 2.3(API level 9)开始Android用系统服务(Service)的方式提供了Download Manager来优化处理长时间的下载操作。Download Manager处理HTTP连接并监控连接中的状态变化以及系统重启来确保每一个下载任务顺利完成。

 

UI界面布局图:

 

 

 

 

 


功能:根据按钮实现相应的功能

 

1、这里用到一个工具类里的一个截图的方法


代码

 


public class BitmapThumbnailHelper {

 /**
  * 对图片进行二次采样,生成缩略图。放置加载过大图片出现内存溢出
  */
 public static Bitmap createThumbnail(byte[] data, int newWidth,
   int newHeight) {
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeByteArray(data, 0, data.length, options);
  int oldWidth = options.outWidth;
  int oldHeight = options.outHeight;

  // Log.i("Helper", "--->oldWidth:" + oldWidth);
  // Log.i("Helper", "--->oldHeight:" + oldHeight);

  int ratioWidth = 0;
  int ratioHeight = 0;

  if (newWidth != 0 && newHeight == 0) {
   ratioWidth = oldWidth / newWidth;
   options.inSampleSize = ratioWidth;
   // Log.i("Helper", "--->ratioWidth:" + ratioWidth);

  } else if (newWidth == 0 && newHeight != 0) {
   ratioHeight = oldHeight / newHeight;
   options.inSampleSize = ratioHeight;
  } else {
   ratioHeight = oldHeight / newHeight;
   ratioWidth = oldWidth / newWidth;
   options.inSampleSize = ratioHeight > ratioWidth ? ratioHeight
     : ratioWidth;
  }
  options.inPreferredConfig = Config.ALPHA_8;
  options.inJustDecodeBounds = false;
  Bitmap bm = BitmapFactory
    .decodeByteArray(data, 0, data.length, options);
  return bm;
 }

 public static Bitmap createThumbnail(String pathName, int newWidth,
   int newHeight) {
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeFile(pathName, options);
  int oldWidth = options.outWidth;
  int oldHeight = options.outHeight;

  int ratioWidth = 0;
  int ratioHeight = 0;

  if (newWidth != 0 && newHeight == 0) {
   ratioWidth = oldWidth / newWidth;
   options.inSampleSize = ratioWidth;
  } else if (newWidth == 0 && newHeight != 0) {
   ratioHeight = oldHeight / newHeight;
   options.inSampleSize = ratioHeight;
  } else {
   ratioHeight = oldHeight / newHeight;
   ratioWidth = oldWidth / newWidth;
   options.inSampleSize = ratioHeight > ratioWidth ? ratioHeight
     : ratioWidth;
  }
  options.inPreferredConfig = Config.ALPHA_8;
  options.inJustDecodeBounds = false;
  Bitmap bm = BitmapFactory.decodeFile(pathName, options);
  return bm;
 }

 // 获取视频文件的典型帧作为封面
 @SuppressLint("NewApi")
 public static Bitmap createVideoThumbnail(String filePath) {
  Bitmap bitmap = null;
  MediaMetadataRetriever retriever = new MediaMetadataRetriever();
  try {
   File file = new File(filePath);
   if (file.exists()) {
    Log.i("MainActivity", "文件存在:" + file.exists());
   }
   retriever.setDataSource(filePath);
   bitmap = retriever.getFrameAtTime();
  } catch (Exception ex) {
   ex.printStackTrace();
   Log.i("MainActivity", "" + ex.getMessage());
  } finally {
   try {
    retriever.release();
   } catch (RuntimeException ex) {
   }
  }
  return bitmap;
 }

 // 获取音乐文件中内置的专辑图片
 @SuppressLint("NewApi")
 public static Bitmap createAlbumThumbnail(String filePath) {
  Bitmap bitmap = null;
  MediaMetadataRetriever retriever = new MediaMetadataRetriever();
  try {
   retriever.setDataSource(filePath);
   byte[] art = retriever.getEmbeddedPicture();
   bitmap = BitmapFactory.decodeByteArray(art, 0, art.length);
  } catch (Exception ex) {
  } finally {
   try {
    retriever.release();
   } catch (RuntimeException ex) {
   }
  }
  return bitmap;
 }
}

 

 

 


2、在配置清单添加下载的相应权限


    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
 
 
 
 
 
 
 
 
 
3、MainActivitiy.java类


代码


public class MainActivity extends Activity {

 private String downURL = "http://192.168.10.45:8080/myweb/service_aidl.wmv";
 private DownloadManager manager;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  // DownloadManager属于系统服务
  // 获取管理器
  manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
 }

 // 下载视频按钮事件监听
 public void downmovie(View view) {
  switch (view.getId()) {
  case R.id.bt_download:
   // 下载视频方法
   download();
   break;
  case R.id.bt_downmovie:
   Intent intent = new Intent();
   intent.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);// 打开下载的所有视频
   startActivity(intent);
   break;
  case R.id.bt_movie_cover:// 生成视频封面
   Bitmap bitmap = BitmapThumbnailHelper
     .createVideoThumbnail(Environment
       .getExternalStoragePublicDirectory(
         Environment.DIRECTORY_MOVIES)
       .getAbsolutePath()
       + File.separator + "service_aidl.wmv");
   ImageView imageView = (ImageView) this.findViewById(R.id.imageview);
   imageView.setImageBitmap(bitmap);
   break;
  }
 }

 private void download() {
  // 创建下载任务请求
  Request request = new Request(Uri.parse(downURL));

  request.setTitle("正在下载...");// 设置下载通知进度标题
  request.setDescription("service_aidl.wmv");// 设置通知进度条的正下方内容
  // request.setDescription(null); 设置为空 则显示下载剩余时间

  // 第一个参数:视频下载到哪里存放的位置
  // 第二个参数:存放的文件夹名字
  request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES,
    "service_aidl.wmv");
  // 设置下载模式
  request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

  // 把下载任务放到队列中
  manager.enqueue(request);
 }
}

 

 

总结:DownloadManager类把通知也封装了 对于下载比自己写个服务来下载还是比较好用的

© 著作权归作者所有

初来小修
粉丝 4
博文 117
码字总数 80711
作品 0
广州
私信 提问
Android系统下载管理DownloadManager功能介绍及使用示例

本文主要结合源码介绍 Android系统下载管理DownloadManager的强大功能及使用。 建议直接查看原文Android系统下载管理DownloadManager功能介绍及使用示例。 另推荐下载管理如何进行功能增强和...

Trinea
2013/05/29
6.1K
3
android webview downloadManager文件下载管理

一。downloadmanager类说明: 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到。下载管理类可以长期处理多个HTTP下载任务,客户端只需要...

simpower
2014/09/29
562
0
调用android自带的下载功能,进度在消息通知栏上显示

public class CompleteReceiver extends BroadcastReceiver { private DownloadManager downloadManager = null; @Override public void onReceive(Context context, Intent intent) { try {......

jeremy_C
2014/03/11
2.4K
0
如何单元测试一个有依赖的生成功能jar包的代码?

最近在移植android的下载部分代码,顺便也把相关的单元测试代码整了 出来。具体架构是这样的:DownloadProvider 维护着下载服务和数据库操作,生成一个DownloadProvider.apk;DownloadManag...

桃园小七
2014/07/18
643
1
android 默认浏览器 无法下载,此手机不支持此内容(自定义文件or APK文件看过了)

如果你是apk或者android系统可以识别的问题,那么一定是服务器MIME文件类型没有配置正确 APK文件配置如下: <mime-mapping> </mime-mapping> 其他文件请参考MIME配置对照表 下面是android不能...

补全
2014/01/19
4.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

反编译9.png图片还原

本文链接:https://blog.csdn.net/a1140778530/article/details/10528507 经常反编译apk文件找资源,9.png的文件处理起来很麻烦。 最近使用Ant自动编译打包app时,从别处搜罗来的9.png文件导...

shzwork
27分钟前
6
0
Shell脚本应用 – for、while循环语句

一、for循环语句 在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同。例如:根据通讯录中的姓名列表创建系统账号等情况。 当面对各种...

linux-tao
28分钟前
5
0
RPA风潮下企业财务工作模式的变革

RPA(机器人流程自动化)在财务领域的应用,正给企业财务带来前所未有的改变。 前RPA时代,财务领域面临的痛点 在RPA机器人应用之前,企业财务工作进程的推进,主要通过财务人员人工操作或信...

UiBot
33分钟前
5
0
Hive之命令行修改表注释

最近遇到一个需求,在不重建表的情况下,修改表的注释,hive有没有类似关系型数据库的SQL命令来修改呢,找了下,亲测有效,如下List-1 List-1 hive>use your_schemahvie>ALTER TABLE tabl...

克虏伯
33分钟前
5
0
是什么,它的作用是什么

在HTML文档的首部往往会有这么一句话<!DOCTYPE html>,许多时候我们忽视了它的存在,它实际上是一个声明,告诉浏览器用哪种HTML版本的规范来解读HTML文档。 尽管我们不给出这句声明浏览器照样...

前端老手
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部