android中自带的下载器DownloadManager很好用,一般的需求都是可以满足的,至于怎么使用,暂不介绍,因为网上搜一下大把,就不浪费口水了。而我这里要分享的是开启下载之后通知栏的notify点击事件,因为我发现在网上很多人更多是倾向于介绍等有空再补充这里主要要介绍一下DownloadManager如何使用去下载,而对于下载过程中如何通过通知栏控制介绍甚少,这里我结合官方文档就简单介绍一下。


首先介绍一下如何在开启下载的时候,通知栏会有通知下载,代码如下:

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));//在通知栏中显示request.setVisibleInDownloadsUi(true);

这样设置之后,开启一个下载任务在通知栏就会有通知显示下载过程


而在DownloadManager下载完成,或者需要在下载过程中通过点击通知来取消下载任务该如何做呢?首先看一下官方文档


可以看到前面有两个常量是广播(broadcast)对应的intent action,没错DownloadManager就是通过广播机制对下载完成跟点击事件进行广播的,那么我们要做的就是在AndroidManifest.xml里面声明一下广播,如下:

<receiver android:name="com.onecity.common.update.DownloadService$DownloadReceiver" >            <intent-filter>                <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />                <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>            </intent-filter>        </receiver>
再在代码里面进行接收,下面是整个接收器代码:

/** *  * @author 林楷鹏 * @description 下载完成广播接收器 * @create 2014-7-24下午3:28:34 * */public static class DownloadReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {DownloadManager manager = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())){DownloadManager.Query query = new DownloadManager.Query(); //在广播中取出下载任务的idlong id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);    query.setFilterById(id);     Cursor c = manager.query(query);     if(c.moveToFirst()) {     //获取文件下载路径        String filename = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));        //如果文件名不为空,说明已经存在了,拿到文件名想干嘛都好        if(filename != null){}    }}else if(DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(intent.getAction())){long[] ids = intent.getLongArrayExtra(DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS);//点击通知栏取消下载manager.remove(ids);ShowToastUtil.showShortToast(context, "已经取消下载");}}}


从代码中可以看到,在onReceive方法中对接收到的广播的action进行分析,匹配到广播对应的动作,可以做相应的处理。总结一点就是要多参考一下android的官方文档,有的东西网上写得不太清楚,但是有些人就爱乱抄。


更多相关文章

  1. 广播+ Service详解、通知和权限-Android基础知识整理
  2. 【腾讯bugly干货】关于 Android(安卓)N 那些你不知道的事儿
  3. Android开机广播无效问题(手机Root后)
  4. 团队Android小作品Chinchilla Guitar(琴琪拉吉他)发布,欢迎大家下载
  5. 第五章 全局大喇叭---详解广播机制(Broadcast Receiver )
  6. Android开发22——广播接收者BroadcastReceiver的原理和注册方式
  7. 我在Mac OS X 操作系统上搭建Android开发环境的经历
  8. 在android中如何显示维语
  9. Android(安卓)网络请求,应用的下载与安装

随机推荐

  1. Android(安卓)使用HttpGet进行登录
  2. android 启动第三方APP的方式
  3. Android之SeekBar
  4. android之sqlite数据库初级
  5. Android(安卓)LocalSocket / LocalServer
  6. android Gallery3D效果
  7. Android(安卓)打开文件管理器 获取文件的
  8. android中定制的dialog
  9. android版本与linux内核版本对应关系
  10. android 随手记 SQLITE代码 直接能用