通过bindService方法来调用服务final Down down = data;

viewHolder.videoActionBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if(bEditMode) {

// 处于编辑模式,点击删除

deleteDown(down);

} else {

// 处于播放模式,点击播放

VideoItemData video = (new Gson()).fromJson(down.getData(),

VideoItemData.class);

if(video != null) {

video.setMp4Url(down.getSavaPath());

VideoUtils.playVideo(context, video);

}

}

}

});

调用Service来删除Down。在ServiceConnection对象的onServiceConnected方法中,执行删除操作之后,调用unbindService方法来解绑定操作。

/**

* 删除下载的记录和内容。

*

* @param down

*/

private void deleteDown(final Down down){

Intent intent = new Intent(context, DownService.class);

ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

((DownBinder)service).deleteDown(down, true);

context.unbindService(this);

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

context.bindService(intent, conn, Context.BIND_AUTO_CREATE);

}

在Service类中定义Binder的子类。public class DownBinder extends Binder implements IDown {

@Override

public Down downVideo(VideoItemData video) {

if (!NetUtil.hasNetwork(context)) {

UIUtils.showToast(context, "网络不给力");

return null;

}

if (!SettingSharedPreference.getInstance().getCacheWith2G3G() && !NetUtil.hasWifiNetWork(context)) {

UIUtils.showToast(context, "已经禁止2G/3G网络下载视频");

return null;

}

synchronized (downList) {

for (Down down : downList) {

// 如果已经在下载列表中,直接返回down对象。

if (down.getUrl().equals(video.getMp4Url())) {

UIUtils.showToast(context, "已经在下载列表中");

return down;

}

}

}

// 如果是一个新的下载,发送消息开始一个新的下载。

Message.obtain(handler, DOWN_URL, video).sendToTarget();

return null;

}

@Override

public List getAllDown() {

return getDownList();

}

@Override

public void pauseDown(Down down) {

downHandler.removeMessages(START_DOWN);

down = getExistDown(down);

downHandler.sendMessage(downHandler.obtainMessage(PAUSE_DOWN, down));

}

@Override

public void startDown(Down down) {

downHandler.removeMessages(PAUSE_DOWN);

down = getExistDown(down);

downHandler.sendMessage(downHandler.obtainMessage(START_DOWN, down));

}

/**

* 取出对应的Down 从downList中取出的Down都赋值了DownTask

*

* @param down

* @return

*/

private Down getExistDown(Down down) {

for (Down d : downList) {

if (down.getUrl().equals(d.getUrl())) {

return d;

}

}

return down;

}

@Override

public void deleteDown(Down down, boolean deleteFile) {

downHandler.removeMessages(START_DOWN);

downHandler.removeMessages(PAUSE_DOWN);

down = getExistDown(down);

downHandler.obtainMessage(DELETE_DOWN, (deleteFile ? 1 : 0), 0, down).sendToTarget();

}

@Override

public void clearDown(boolean deleteFile) {

downHandler.removeMessages(START_DOWN);

downHandler.removeMessages(PAUSE_DOWN);

downHandler.obtainMessage(CLEAR_DOWN, deleteFile).sendToTarget();

}

@Override

public void reStartDown(Down down) {

down = getExistDown(down);

downHandler.obtainMessage(RESTART_DOWN, down).sendToTarget();

}

}

在onCreate方法中创建DownBinder实例。downBinder = new DownBinder();

在onBind方法中返回DownBinder实例。

@Override

public IBinder onBind(Intent intent) {

return downBinder;

}

android服务下载,android服务之bindService和unService中下载任务中的应用相关推荐

  1. Android应用程序绑定服务(bindService)的过程源代码分析

    Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部 ...

  2. Android 系统内置下载器服务 DownloadManager 的使用

    本文链接: https://blog.csdn.net/xietansheng/article/details/52513624 在 Android 程序开发中如果需要下载文件,除了自己程序内部实现下 ...

  3. android服务框架下载,GG服务框架安装器

    GG服务框架安装器是一款谷歌四件套的下载软件.无需root就能一件修复谷歌框架中的谷歌四件套了.当然你也能轻松下载4件套.这款软件最大的亮点就是修复游戏闪退.还有24小时的人工服务,手把手教你GG服务 ...

  4. Android开发 - 线程和服务

    服务吧,在程序即便关闭的时候还是可以回后台运行,不搞情怀了.后台功能属于四大组件之一. 服务是Android中实现程序后台运行的解决方案,很适合执行不需要与用户交互而且长时间运行的任务.不依赖于任何U ...

  5. android启动服务的生命周期,android Service启动运行服务 生命周期

    Service Android中的service类似于windows中的service,service一般没有用户操作界面,它运行于系统中不容易被用户发觉, 可以使用它开发如监控之类的程序. 一.步骤 ...

  6. 如何给Android应用创建本地服务

    Android系统给应用提供了两种类型的服务:启动型本地服务和绑定型本地服务,这两种服务的详细信息请参考"Android Service开发指南" Android Service开 ...

  7. android jni示例_Android服务示例

    android jni示例 A service is a component that runs in the background for supporting different types of ...

  8. android平台安全支付服务(msp)应用开发接口,Android接入支付宝和微信支付的方法...

    前言 很多APP都需要支付功能,国内一般就是支付宝和微信了.目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端. APP端总结起来就是三步走: 接入支付的库 ...

  9. 使用Google Play服务的Android定位

    Welcome to android location using google play services example. Today we will learn how to use Googl ...

最新文章

  1. ioctl中的ifconf ifreg 结构
  2. 启明云端直播来了!真的来了!15号晚7:30分启明云端带着8ms菇凉正式亮相立创直播,带你一起畅玩彩屏!参与直播互动的小伙伴将会得到红包大奖及获得SigmarstarSSD201开发板\核心板的机会
  3. 服务的默认端口_Informatica端口管理
  4. PAT1049 数列的片段和 (20 分)
  5. 移动端实现hover效果
  6. mysql+安全性语言实验,实验四--数据库的安全性、完整性控制
  7. 详解NLP和时序预测的相似性【附赠AAAI21最佳论文INFORMER的详细解析】
  8. 美团都在用的实时应用监控平台,到底有多好用?
  9. 2019 vs 安装odt_河南2019二级造价师考试教材出版信息,免费送考试大纲
  10. 我运维生涯的第一个Blog
  11. Python3的scapy库的学习(暂无内容)
  12. 企业架构 | TOGAF架构能力框架
  13. 思科模拟器路由表怎么看_思科路由器查看配置命令
  14. 【学习笔记】利用偏导求解不等式(拉格朗日数乘法)
  15. 数据结构与算法复习第一弹(快速排序)
  16. 苹果采集插件全套教程-苹果cmsV10采集插件
  17. 计算机网络--第一章 概述--课后习题答案
  18. 史上最全最精美的ppt模板,这里有2000多套ppt,涵盖了各行各业的ppt类型,不管是在校用还是工作用,这里面都有!
  19. 目标检测算法——YOLOv5/YOLOv7改进之结合GAMAttention
  20. jqGrid 表格底部汇总、合计行footerrow处理

热门文章

  1. ZOJ1450 Minimal Circle 最小圆覆盖
  2. Matlab如何求离散点的导数
  3. MATLAB字符串数组中查找指定子串
  4. java取邮箱前缀_java抓取网页或文件中的邮箱号码
  5. SVG格式的Icon,用了你就知道有多香
  6. vue 字符串分割_嗯哼vue组件taginput包教不包会
  7. java填充二维数组_Java用Arrays.fill()初始化二维数组的实现
  8. Number()、parseInt()、parseFloat()的区别
  9. 正确判断js数据类型 总结记录
  10. CSS原理解析之模型篇