android 注册动态广播 注销_Android学习笔记(十一)BroadcastReceiver动态注册、注销示例...

在上一篇博文中简单介绍了一下BroadcastReceiver的相关知识点,本篇举一个在代码中动态的注册、注销BroadcastReceiver的栗子。

1、首先创建一个MyReceiver并继承BroadcastReceiver,既然要动态注册该receiver的话,就无需在AndroidManifest.xml中配置它了:

public class MyReceiver extends BroadcastReceiver {

public static final String ACTION = "com.codingblock.receive.intent.action.MyReceiver";

public MyReceiver() {

}

@Override

public void onReceive(Context context, Intent intent) {

System.out.println("接收到的消息为:" + intent.getStringExtra("data"));

}

}

代码分析:上面代码中定义了一个静态变量ACTION,以方便程序指定该receiver。另外,从onReceive()方法的第二个参数intent可以获取到传递过来的数据。

2、布局文件如下,很简单,只有三个按钮:发送消息按钮、注册receiver按钮和注销receiver按钮。

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/btn_send_receiver"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="发送消息" />

android:id="@+id/btn_register_receiver"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="注册receiver" />

android:id="@+id/btn_unregister_receiver"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="注销receiver" />

3、最后在MainActivity中测试一下

public class MainActivity extends Activity implements OnClickListener {

private MyReceiver receiver = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.btn_send_receiver).setOnClickListener(this);

findViewById(R.id.btn_register_receiver).setOnClickListener(this);

findViewById(R.id.btn_unregister_receiver).setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_send_receiver:

Intent i = new Intent(MyReceiver.ACTION);

i.putExtra("data", "来自MainActivity的消息");

sendBroadcast(i);

break;

case R.id.btn_register_receiver:

if (receiver == null) {

System.out.println("注册receiver");

receiver = new MyReceiver();

registerReceiver(receiver, new IntentFilter(MyReceiver.ACTION));

}

break;

case R.id.btn_unregister_receiver:

if (receiver != null) {

System.out.println("注销receiver");

unregisterReceiver(receiver);

receiver = null;

}

break;

default:

break;

}

}

}

代码分析:本段代码在23行,通过registerReceiver()方法动态的注册了MyReceiver,并且使用过后最好不要忘了用unregisterReceiver()方法再将其注销,注销后应将receiver设为null。

4、运行结果如下

测试就会发现在点击发送消息按钮之前,如果没有注册receiver的话是不能成功发送消息的,只有注册了receiver,点击发送消息log中才有输出:

从日志输出就能看出,当注册好了receiver后,按下发送消息按钮,在MyReceiver中就能收到来自MainActivity的消息。

Android学习笔记--Broadcast, BroadcastReceiver(广播)

参考资料:http://www.cnblogs.com/playing/archive/2011/03/23/1992030.html 在 Android 中使用 Activity, Service, ...

Android学习笔记—Windows下NDK开发简单示例

该示例假设Android开发环境已经搭建完成,NDK也配置成功: 1.在Eclipse上新建Android工程,名称为ndkdemo.修改res\layout\activity_main.xml &l ...

【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

Android实现AppWidget、Broadcast动态注册

Android实现AppWidget.Broadcast动态注册 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 主界面可以编辑广播的信息,点 ...

【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...

udacity android 学习笔记: lesson 4 part b

udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

Android学习笔记36:使用SQLite方式存储数据

在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文

【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler

文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文

【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

随机推荐

[cf140e]New Year Garland

Description 用$m$种颜色的彩球装点$n$层的圣诞树.圣诞树的第$i$层恰由$l[i]$个彩球串成一行,且同一层内的相邻彩球颜色不同,同时相邻两层所使用彩球的颜色集合不同. 求有多少种装点 ...

LR学习笔记---参数设置 (转 温故而知新)

LR在录制程序运行的过程中,VuGen(脚本生成器) 自动生成了包含录制过程中实际用到的数值的脚本,如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询.提交等等),那么你必须用参数值取代录制 ...

Android Terminal telnet windows

/******************************************************************************************** * Andr ...

在 Transact-SQL 中使用 TRY...CATCH

在 Transact-SQL 中使用 TRY...CATCH (注:本文来自于 http://msdn.microsoft.com/zh-cn/library/ms179296.aspx)       ...

R cannot be resolved to a variable 解决办法

Android开发过程中,碰到R cannot be resolved to a variable的报错信息,好像没有很确定的错误原因,一般来说,我总结出几个可能的解决方法,希望试过以后管用... 1 ...

django+vue

django安装配置方式略过 1.安装node.js,官网地址:https://nodejs.org/zh-cn/download/ 2.cd到项目目录下,执行npm install -g vue-c ...

Django--cookie(登录用)

一.cookie产生原因 二.cookie的原理图 三.Django中如何设置/读取/删除cookie 四.Django中如何设置cookie的参数 一.cookie产生原因 HTTP协议的无状态保存 ...

Collectors类中的静态工厂方法

工厂方法 返回类型 用于 toList List 把流中的所有数据元素收集到List集合中. stream.collect(toList());  toSet Set

SoapUI--the use of Script Library

SoapUI--the use of Script Library 有两种方法在soapUI中引用自己的groovy脚本库. 方法一:把自己的script folder放到soapUI install ...

P1972 HHのnecklace 离线+树状数组

此题莫队可过 然而太难了...... 我在胡雨菲那看的解法,然后自己打了一波,调了一个错,上交,自信AC. 做法:离线,对于L排序. 每种颜色可能出现很多次,那么我们如何不算重复呢? 只需把[L,n] ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值