android DownloadManager广播事件:下载完成、通知栏点击事件
2014-11-26 21:50
459 查看
android中自带的下载器DownloadManager很好用,一般的需求都是可以满足的,至于怎么使用,暂不介绍,因为网上搜一下大把,就不浪费口水了。而我这里要分享的是开启下载之后通知栏的notify点击事件,因为我发现在网上很多人更多是倾向于介绍等有空再补充这里主要要介绍一下DownloadManager如何使用去下载,而对于下载过程中如何通过通知栏控制介绍甚少,这里我结合官方文档就简单介绍一下。
首先介绍一下如何在开启下载的时候,通知栏会有通知下载,代码如下:
这样设置之后,开启一个下载任务在通知栏就会有通知显示下载过程
而在DownloadManager下载完成,或者需要在下载过程中通过点击通知来取消下载任务该如何做呢?首先看一下官方文档
![](https://img-blog.csdn.net/20141126225352490?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3JvY2xpbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到前面有两个常量是广播(broadcast)对应的intent action,没错DownloadManager就是通过广播机制对下载完成跟点击事件进行广播的,那么我们要做的就是在AndroidManifest.xml里面声明一下广播,如下:
/**
*
* @author 林楷鹏
* @description 下载完成广播接收器
* @create 2014-7-24下午3:28:34
*
*/
public static class DownloadReceiver extends BroadcastReceiver {
@Override
public 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();
//在广播中取出下载任务的id
long 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的官方文档,有的东西网上写得不太清楚,但是有些人就爱乱抄。
首先介绍一下如何在开启下载的时候,通知栏会有通知下载,代码如下:
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 {
@Override
public 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();
//在广播中取出下载任务的id
long 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的官方文档,有的东西网上写得不太清楚,但是有些人就爱乱抄。
相关文章推荐
- 如何处理:下载文件的按钮在事件未完成之前防止多次点击,事件完成之后又能继续点击提交
- 安卓Download Manager下载管理器全解:启动下载,监听点击下载通知,设置下载完成函数
- Android downloadmanger 2之对于下载完成和点击下载通知的监听
- 立即获得下载任务完成的消息通知。Android DownloadManager通过注册一个广播监听系统的广播事件完成此操作,在创建广播时候,需要指明过滤器为:DownloadManager.ACTIO
- 多种SOKECT通讯模型的理解(select,WSAAsyncSelect,WSAEventSelect,Overlapped I/O 事件通知,Overlapped I/O 完成例程,IOCP)
- 保存图片/视频到相册 保存完成后通知事件
- .net C# 实现点击下载PDF文件(通知浏览器打开下载对话框) 不是直接打开
- android 下载应用 通知栏显示进度 下完之后点击安装 (很实用)
- 很幽默的讲解六种Socket IO模型 Delphi版本(自己Select查看,WM_SOCKET消息通知,WSAEventSelect自动收取,Overlapped I/O 事件通知模型,Overlapped I/O 完成例程模型,IOCP模型机器人)
- 保存图片/视频到相册 保存完成后通知事件 IOS
- android 摄像头对焦,zoom的通知事件回调,告诉java应用层已经对焦完成
- Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐
- 在SHTML中通过JS调用APSX完成超联接的点击事件
- android 后台下载、通知栏、完成弹窗
- Android DownloadManager下载完成事件监听(系列4)
- documentsUI下载列表点击事件流程
- 完成用户数据的导出,生成文本文件Users.txt,实现点击按钮自动下载
- 点击通知栏中推送通知的触发事件
- android 下载应用 通知栏显示进度 下完之后点击安装
- 版本升级实现代码 点击下载安装 并在通知栏显示