前一阵子,在给公司的智能电视做下载模块的时候发现,android自带的DownloadManager在有线网的情况下没有反应。看了下源码发现标准的手机版android的DownloaderManager就是没有对有线网的情况作处理,于是花了些时间自己写了个下载模块。考虑到国内大多数的智能电视都是基于手机版android改的,所以这里共享一下。

先发一下源码地址:https://github.com/zhanglong1/ZlsamDownloadService。

ZlsamDownloadService是一个可以管理多个下载任务的android服务,你把它作为DownloadManager的备选方案。具体功能如下:

  1. 支持多任务

  2. 线程安全

  3. 支持有线网环境

  4. 可以多app共享使用

  5. 持久化状态,下次启动时可以继续未完成任务

  6. 支持插队,对于紧急任务特别有用

最大等待队列:20;

最大处理队列:3;

最大成功队列:20;

最大失败队列:20。

如果以上参数不能满足你的需求,你可以直接在代码中更改,具体位置在TaskQueueManager。

如何使用

如果你想将代码嵌入到你自己的项目当中,你需要将ZlsamDownloadService项目改为library,并在你的项目中引用。在onStart回调中启动和绑定的代码如下:

Intent intent = new Intent("com.zlsam.download.DOWNLOAD_SERVICE");
startService(intent);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE); IMainDownloadingService mDownloadService;
private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mDownloadService  = IMainDownloadingService.Stub.asInterface(service);appendLog("Bound to download service.");}@Overridepublic void onServiceDisconnected(ComponentName name) {mDownloadService = null;}
};

绑定成功之后你可以调用相关方法,这些方法定义在com.zlsam.download.IMainDownloadingService。

下载:


try {int result = mDownloadService.add2Queue(url, null, null, false);if (result < 0) {appendLog("Add task failed, error code: " + result + ", url: " + url);} else {appendLog("Add task succeed, url: " + url);}
} catch (RemoteException e) {e.printStackTrace();
}

插队下载:


try {int result = mDownloadService.add2Queue(url, null, null, true);if (result < 0) {appendLog("Add task jump failed, error code: " + result + ", url: " + url);} else {appendLog("Add task jump succeed, url: " + url);}
} catch (RemoteException e) {e.printStackTrace();
}

检查任务状态:


try {state = mDownloadService.queryState(url);
} catch (RemoteException e) {e.printStackTrace();appendLog("Check task state: exception, url: " + url);
}
switch (state) {case -1:appendLog("Check task state: not found, url: " + url);break;case 0:appendLog("Check task state: waiting, url: " + url);break;case 1:appendLog("Check task state: processing, url: " + url);break;case 2:appendLog("Check task state: succeed, url: " + url);break;case 3:appendLog("Check task state: failed, url: " + url);break;
}

如果你想清除一个已经结束的(成功或者失败)任务(包括已下载的文件):

try {mDownloadService.clearOne(mFinishedTasks.get(mFinishedTasks.size() - 1));
} catch (RemoteException e) {e.printStackTrace();
}

离开界面时你要在onStop回调中解绑服务:

unbindService(mConnection);

调试命令

adb logcat ZlsamDownloadService:V *:S

Demo

你可以直接build安装并启动ZlsamDownloaderService,代码中自带的TestActivity就是一个测试Demo。

转载于:https://blog.51cto.com/9797337/2398719

DownloadManager不好用?试试ZlsamDownloadService相关推荐

  1. qt5 窗体显示完毕信号_iPhone手机信号不好?试试这样设置,随时随地让你的手机信号满格...

    经常有小伙伴觉得自己正在使用的iPhone手机经常信号不好,其实除了一些外部因素之外,手机基带也是影响iPhone手机信号的一个重要因素.那么如何查询自己的手机使用的是什么基带?怎样提高iPhone手 ...

  2. 短信转化效果不好?试试这几招

    一般我们收到的短信文案都是这样的: 1元商品限量疯抢!再送15元券,快来抢购吧! 但是 如果某一天,你突然收到一条这样的短信: 死鬼,这么久你都不来看我,是不是已经把我忘记了? 你是不是心神一下子就荡 ...

  3. 网易云海外推流部署实践

    谈到直播,实时性和流畅性一直是整个服务体系中的重中之重.本文是网易云通信视频技术开发工程师何荣光在LiveVideoStack Meet杭州站沙龙的分享,着重梳理网易云在海外推流方面的部署实践,帮助开 ...

  4. 网易云助力云音乐短视频功能快速上线

    和传统的内容创业模式相比,短视频的直观性.软性植入.内容灵活.互动性高以及更加丰富多元化的营销服务,吸引了很多人投身.除此之外,短视频往往依托于网红而诞生.网红自身所带有的高转化率.低成本和强大的粉丝 ...

  5. 【揭秘】视频直播关键技术

    这两年互联网领域的一个热门关键词就是视频直播,从刚开始的游戏直播和秀场娱乐开始,现在各个行业里都植入了直播元素.网易云一直致力于给大家提供更好的视频服务,这篇文章聊一聊视频直播的几个关键技术:  清晰 ...

  6. 我有做短视频的freestyle,要来一起吗?

    如果说2016年是各类直播app充斥我们日常生活的一年.那么2017年,短视频继而成了热点. 打开朋友圈,同事在巴厘岛旅游的小视频下刷出几十个赞:微博关注的女神的自拍变成了几秒的faceU,脸上带上了 ...

  7. 推进教育人工智能?网易云和网易波特 “四步走”

    是的,以上就是在网易云创大会以"唤醒未来,技术革新推动知识共享"为主题的教育论坛上,网易云通信与视频副总经理王丹丹分享的网易云AI助教演示视频.未来,网易云将携手网易波特基于通信与 ...

  8. 网易云创大会如何论道科技+教育?

    7月14日,围绕"唤醒未来,技术革新推动知识共享"为主题的网易云创教育论坛在杭州举行.来自新东方.好未来.iTutorGroup集团.柚子练琴.abc360. stuQ等教育行业和 ...

  9. 【高能】IM3.9.1版本正式上线!

    本次版本更新以音频的优化为主,主要体现在音频音质和音频通话的弱网表现. 对于音质,我们综合各种用户使用场景,归纳出了三种模式:基础通话模式.高清语音模式和高清音乐模式,三种模式分别有其不同的适应场景( ...

最新文章

  1. pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列、基于dataframe的日期数据列生成日期索引
  2. 通过HTML的canvas实现简单的画图功能
  3. Java动态代理的实现
  4. matlab泰勒图,matlab画泰勒图
  5. 学习之路三十一:Varchar和NVarchar的理解
  6. 隐藏模块(无模块注入)
  7. 关于 ESP,EBP,EIP
  8. lost connection to MySQL server at waiting for initial communication packet,system error:o
  9. 苹果Apple Watch样机Mockups素材,你用过吗?
  10. 字符集不同导致的ORA-00972
  11. Q110:PBRT-V3十大基类对应的继承关系
  12. Redis容量及使用规划(转)
  13. 一个好用的不基于时间的同步文件的软件 —— Allway sync 文件同步
  14. flutter SliverAppBar
  15. echarts 多个 geo 实现缩放拖拽同步
  16. aspectj tomcat load-time waver
  17. 802.11ac双频
  18. ChatGPT中文使用手册
  19. 华为Ascend昇腾计算产业介绍
  20. Andriod 虚拟机

热门文章

  1. VMware ESXi 为虚拟机分配usb设备(硬盘)
  2. Web 安全与 Rational AppScan 入门
  3. MSSQL中使用CASE函数来灵活返回结果
  4. SQL Server 2005 Analysis Services实践(一)
  5. Redis学习笔记01---配置文件
  6. 陌陌看好的移动营销 Criteo表示尚未成为主流
  7. 【扇贝批量添加单词到词库】利用python调用扇贝API (oauth2)
  8. 数据库事务的四个隔离级别
  9. 如何在XSLT中将字符串转换为大写或小写形式
  10. 实现一个Ajax模式的文件上传功能有多难?