广播接收者
2016-06-01 18:15
489 查看
第一种方式: 动态注册
一般在所在的Activity的onCreate()方法中动态注册一个广播,添加广播条件。
在onCreate()中注册:
在本Activity中写接收者处理【好处是便于数据处理】 (也可以单独一个receiver包中写)
在Activity或Service子类中的onDestroy()方法中解除注册广播:
发送广播在哪里发送呢? 可以在本Activity发送,也可以在其他Activity发送,也可以在Service,线程中发送。 一般都是在线程执行之后发送。
/*=================================================================*/
另外,
广播也可以在Service类中的onCreate()方法中注册,添加广播条件:
在onCreate()中注册:
接收者处理也写在本类中:
在Activity或Service子类中的onDestroy()方法中解除注册广播:
发送广播在哪里发送呢? 可以在本Activity发送,也可以在其他Activity发送,也可以在Service,线程中发送。 一般都是在线程执行之后发送。
广播发送的时候可以携带数据包Bundle一起通过Intent来发送。
相应接收者也可以在接收处理的时候从传过来的intent中获取数据包获得相关的数据,例如数值,集合,图等。
第二种方式:在manifest中注册广播接收者 (name要写广播接收者的全部路径 另外这种方式注册的广播不需要new出对象)
一般在所在的Activity的onCreate()方法中动态注册一个广播,添加广播条件。
private DownOverReceiver downOverReceiver; public static final String RECEIVERACTION = "downover"; public static final String CANCEL_DOWNLOAD = "canceldownload";
在onCreate()中注册:
downOverReceiver = new DownOverReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(RECEIVERACTION); intentFilter.addAction(CANCEL_DOWNLOAD); registerReceiver(downOverReceiver, intentFilter); // 动态注册 [视频下载结束] 的接收者
在本Activity中写接收者处理【好处是便于数据处理】 (也可以单独一个receiver包中写)
private class DownOverReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(RECEIVERACTION)) { // 具体逻辑 if (downDialog != null && downDialog.isShowing()) { downDialog.dismiss(); } if (!downView.isEnabled()) { downView.setEnabled(true); Log.d(TAG, "下载完成,回调主线程"); initDatas(); tabViewPager.setCurrentItem(1); } } } }
在Activity或Service子类中的onDestroy()方法中解除注册广播:
@Override protected void onDestroy() { if (downOverReceiver != null) { unregisterReceiver(downOverReceiver); } super.onDestroy(); }
发送广播在哪里发送呢? 可以在本Activity发送,也可以在其他Activity发送,也可以在Service,线程中发送。 一般都是在线程执行之后发送。
/** * 开始下载 */ private void startDown() { if (DownPosition == list.size()) { Log.d(TAG, "批量下载已完成~~~"); sendBroadcast(new Intent(SubscriptionDescActivity.RECEIVERACTION)); stopSelf(); return; } count = 0; currentPosition = 0; new GetSDActDetailBiz(context, list.get(DownPosition).ID, handler).startNet(); }
/*=================================================================*/
另外,
广播也可以在Service类中的onCreate()方法中注册,添加广播条件:
public static final String STOP = "downservice_stop"; private StopReceiver receiver;
在onCreate()中注册:
receiver = new StopReceiver(); IntentFilter filter = new IntentFilter(STOP); registerReceiver(receiver, filter);
接收者处理也写在本类中:
class StopReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals(STOP)) { // 在此处写逻辑代码 Log.d(TAG, "调用服务停止广播!"); if (downLoadHelper!=null) { Log.d(TAG, "停止下载"); downLoadHelper.setRunDown(false); } stopSelf(); } } }
在Activity或Service子类中的onDestroy()方法中解除注册广播:
@Override public void onDestroy() { if (receiver!=null) { unregisterReceiver(receiver); } Log.d(TAG, "服务停止!"); super.onDestroy(); }
发送广播在哪里发送呢? 可以在本Activity发送,也可以在其他Activity发送,也可以在Service,线程中发送。 一般都是在线程执行之后发送。
广播发送的时候可以携带数据包Bundle一起通过Intent来发送。
相应接收者也可以在接收处理的时候从传过来的intent中获取数据包获得相关的数据,例如数值,集合,图等。
第二种方式:在manifest中注册广播接收者 (name要写广播接收者的全部路径 另外这种方式注册的广播不需要new出对象)
相关文章推荐
- JAVA程序的基本规则
- 目前网络上开源的网络爬虫以及一些简介和比较
- HDU-5698-瞬间移动
- 14_抓取过程中的常见问题2—cookie的处理
- 判别对象类型
- jquery获取对象
- Google Android开发者文档系列-创建有内容分享特性的应用之发送简单数据到其它应用程序
- Toast自定义
- js笔记---基础部分二
- 谁的青春不迷茫
- [TypeScript] Understanding Generics with RxJS
- PHP安装加载yaf扩展,并用自动生成目录实现hello world程序
- .NET生成静态页面的方案总结
- MFC 创建带窗口的dll链接库.窗口为非模态窗口
- oracle 导出数据 dmp
- svn服务器端的客户端自动更新
- 用Redis存储Tomcat集群的Session
- ListView局部更新
- Tomcat显示文件目录&文件列表
- Android梳理 屏幕适配