Android实现Service后台下载Notification进度条
2011-07-17 23:40
344 查看
原文网址:http://www.obatu.com/android-service-download-notification-progressbar/
最近的项目中,有一个需求是 【后台下载+多线程+Notificaton进度条】的应用。要求有一个Service做下载服务,Notification中显示一进度条,进度条由Service来更新。
花了个把小时在网上找代码,没有一个完美的方案,最后根据片段信息,自己实现了。贴出来分享一下。
思路:
1. 有一个提供队列下载的Service
2. 该Service可以绑定,绑定的时候返回本身实例
3. 该Service提供方法给绑定了该Service的Activity,Activity可以调用Service的提供的方法,给Service添加队列
4. 该Service提供了当前下载队列的信息,信息包括下载的名称,下载进度,Activity通过接口读取队列信息用于操作,如:取消
实现:
1. 队列类
以上文字只是简单的提及了一些思路。在项目中已经实现。下次修改完善后贴上来分享。希望能够将该功能做成一个独立的Service供大家在项目中嵌入使用。
最近的项目中,有一个需求是 【后台下载+多线程+Notificaton进度条】的应用。要求有一个Service做下载服务,Notification中显示一进度条,进度条由Service来更新。
花了个把小时在网上找代码,没有一个完美的方案,最后根据片段信息,自己实现了。贴出来分享一下。
思路:
1. 有一个提供队列下载的Service
2. 该Service可以绑定,绑定的时候返回本身实例
3. 该Service提供方法给绑定了该Service的Activity,Activity可以调用Service的提供的方法,给Service添加队列
4. 该Service提供了当前下载队列的信息,信息包括下载的名称,下载进度,Activity通过接口读取队列信息用于操作,如:取消
实现:
1. 队列类
public class DownLoadQueue{ public int id; //队列id , 该id标识了一条下载线程和Notification public String name; // 队列名称,用于显示在Notification中 public int progress = 0; //进度,一个0-100之前的整数,标识百分比 public boolean isCancel = fale; //是否已经取消,该开关用于取消下载2. Service类:
public class DownloadService extends Service{ private Map downLoadQueue; //下载队列,格式: private Binder serviceBinder = new DownLoadServiceBinder(); // Activity绑定后,会自动条用这个方法 @Override public IBinder onBind(Intent intent) { Log.d("DownloadService", "onBind"); return serviceBinder; } .... private void startDownLoad(DownLoadQueue queue){ new Thread(){ public void run(){ //进行下载工作,这里需要更新downLoadQueue中对应的queue的进度信息 //使用Handler更新notification信息 .... } }.start(); } public void addQueue(DownLoadQueue queue){ this.downLoadQueue.add(queue.id,queue); this.startDownLoad(queue); } public Map getQueueList(){ return this.downLoadQueue; } public class public DownLoadServiceBinder extends Binder{ public DownloadService getService(){ return DownloadService.this; } }3. Activity类:
public class DownLoadActivity{ private Handler handler = new Handler(); private DownloadService downLoadService; private ServiceConnection serviceConnection = new ServiceConnection() { // 连接服务失败后,该方法被调用 @Override public void onServiceDisconnected(ComponentName name) { downLoadService = null; Toast.makeText(DownLoadActivity.this, "Service Failed.", Toast.LENGTH_LONG).show(); } // 成功连接服务后,该方法被调用。在该方法中可以获得downLoadService对象 @Override public void onServiceConnected(ComponentName name, IBinder service) { // 获得downLoadService对象 downLoadService = ((DownLoadService.DownLoadServiceBinder) service).getService(); Toast.makeText(DownLoadActivity.this, "Service Connected.", Toast.LENGTH_LONG).show(); } }; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Intent serviceIntent = new Intent(DownLoadActivity.this,DownloadService.class); bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); startService(serviceIntent); ..... } private void startDownLoad(){ DownLoadQueue queue = new DownLoadQueue(); queue.id = 1; queue.name = "愤怒的小鸟" ... downLoadService.addDownLoad(queue); .... } @Override public void onDestroy(){ super.onDestroy(); unbindService(new Intent(DownLoadActivity.this,DownloadService.class)); }4. 在Service中更新Notification时,不能过于频繁,否则会造成卡机。notification使用RemoteView来自定义Notification,加入进度条加入各种说明文字,等等。
以上文字只是简单的提及了一些思路。在项目中已经实现。下次修改完善后贴上来分享。希望能够将该功能做成一个独立的Service供大家在项目中嵌入使用。
相关文章推荐
- Android实现Service后台下载Notification进度条
- Android 实现service后台多任务下载notification进度条更新
- Android实现Service后台下载Notification进度条
- Android实现Service下载文件,Notification显示下载进度的示例
- Android实现Service下载文件,Notification显示下载进度
- HttpURLConnection实现文件下载,Service加Notification实现后台下载
- android Service实现后台下载
- Android版本更新(Service下载 Notification进度条:直接拿来用)
- Android Service 实现下载,实现前台、通知栏同步更新
- Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo
- Android 在 service 中实现后台录像
- Android 利用Service实现下载网络图片至sdk卡
- android实现图片下载到sdcard中的例子,用进度条显示现在进度,同时间图片显示出来
- Android service学习总结和利用service实现的后台音乐播放功能
- Android 后台Service下载
- Android使用本地Service实现后台播放音乐
- Service + Notification(通知栏)实现断点下载
- Android开发之第一个小项目--我的MP3播放器之后台服务Service的实现(四)
- android实现下载图片在(Notification)通知栏上显示进度。
- Notification+BroadcastReciver+Service实现推送下载