立即获得下载任务完成的消息通知。Android DownloadManager通过注册一个广播监听系统的广播事件完成此操作,在创建广播时候,需要指明过滤器为:DownloadManager.ACTIO
2016-08-16 17:28
941 查看
立即获得下载任务完成的消息通知。Android DownloadManager通过注册一个广播监听系统的广播事件完成此操作,在创建广播时候,需要指明过滤器为:DownloadManager.ACTION_DOWNLOAD_COMPLETE
测试的主Activity MainActivity.Java:
[java] view
plain copy
package zhangphil.demo;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity {
private BroadcastReceiver broadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
// 假设从这一个链接下载一个大文件。
Request request = new Request(
Uri.parse("http://apkc.mumayi.com/2015/03/06/92/927937/xingxiangyi_V3.1.3_mumayi_00169.apk"));
// 仅允许在WIFI连接情况下下载
request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
// 通知栏中将出现的内容
request.setTitle("我的下载");
request.setDescription("下载一个大文件");
// 下载过程和下载完成后通知栏有通知消息。
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE | Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// 此处可以由开发者自己指定一个文件存放下载文件。
// 如果不指定则Android将使用系统默认的
// request.setDestinationUri(Uri.fromFile(new File("")));
// 默认的Android系统下载存储目录
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my.apk");
// enqueue 开始启动下载...
long Id = downloadManager.enqueue(request);
Log.d(this.getClass().getName(), "开始下载任务:" + Id + " ...");
listener(Id);
}
private void listener(final long Id) {
// 注册广播监听系统的下载完成事件。
IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long ID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (ID == Id) {
Toast.makeText(getApplicationContext(), "任务:" + Id + " 下载完成!", Toast.LENGTH_LONG).show();
}
}
};
registerReceiver(broadcastReceiver, intentFilter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
测试的主Activity MainActivity.Java:
[java] view
plain copy
package zhangphil.demo;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity {
private BroadcastReceiver broadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
// 假设从这一个链接下载一个大文件。
Request request = new Request(
Uri.parse("http://apkc.mumayi.com/2015/03/06/92/927937/xingxiangyi_V3.1.3_mumayi_00169.apk"));
// 仅允许在WIFI连接情况下下载
request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
// 通知栏中将出现的内容
request.setTitle("我的下载");
request.setDescription("下载一个大文件");
// 下载过程和下载完成后通知栏有通知消息。
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE | Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// 此处可以由开发者自己指定一个文件存放下载文件。
// 如果不指定则Android将使用系统默认的
// request.setDestinationUri(Uri.fromFile(new File("")));
// 默认的Android系统下载存储目录
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my.apk");
// enqueue 开始启动下载...
long Id = downloadManager.enqueue(request);
Log.d(this.getClass().getName(), "开始下载任务:" + Id + " ...");
listener(Id);
}
private void listener(final long Id) {
// 注册广播监听系统的下载完成事件。
IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long ID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (ID == Id) {
Toast.makeText(getApplicationContext(), "任务:" + Id + " 下载完成!", Toast.LENGTH_LONG).show();
}
}
};
registerReceiver(broadcastReceiver, intentFilter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
相关文章推荐
- Android DownloadManager下载完成事件监听(系列4)
- Android DownloadManager下载完成事件监听(系列4)
- dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了
- (七)android 通知对话框,并且监听了返回键,当按下返回键也会创建一个对话框
- 【Android技巧】通过am完成发送开机广播等操作
- 通过Android系统日志监听程序启动事件
- 【JavaMail】(2)JavaMail的一个案例:用户在网站上注册完成后给用户发一封邮件, 且需要用户通过邮件激活后才可以使用。
- app进入后台之后接收到通知,点进去进入新的页面,再次进入后台,再点击通知进入页面(,两次通过通知进入的页面,创建了两次,会多一个页面,)解决办法监听
- Android DownloadManager 下载完成并安装
- Android自定义一个广播接收器BroadcastReceiver监听系统wifi连接
- 关于PHP-Zend framework2 框架 学习过程。 阅前须知: ZF2中的配置文件是可以静态文件配置来注册和通过相关函数动态注册。 1.EventManager(事件驱动),关于事件驱动,在ZF2相关资料没有详细说明,可以参考ANDROID的事件驱动,MFC的消息响应/事件驱动。
- 【Android】监听自定义通知栏消息事件
- 创建一个系统的Service,能通过ServiceManager.getService取得service
- 有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。
- 在事件触发的时候,有时我们需要一些模拟用户行为的操作。例如:当网页加载完毕后 自行点击一个按钮触发一个事件,而不是用户去点击。
- 监听android home键的实现方式 创建一个广播接受者
- 通过自动加载完成 需要图片上传类的时候,加载图片上传类;需要验证码类的时候,加载验证码类;需要smarty的时候,加载smarty (注意:功能类 和 smarty,数据库连接类不再同一个目录)
- Delphi实现Android 广播事件监听(动态注册广播)
- Android自定义一个广播接收器BroadcastReceiver监听本地消息
- Android 小项目之---- 计算器 使用同一个事件监听完成 加减乘