开发者社区> 一叶飘舟> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android广播机制

简介:
+关注继续查看

一、Android广播机制介绍

广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的。

Android中广播的是操作系统中产生的各种各样的事件。例如,收到一条短信就会产生一个收到短信息的事件。而Android操作系统一旦内部产生了这些事件,就会向所有的广播接收器对象来广播这些事件。

BraodcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,并且广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试是否收到短信,这时候就可以定义一个BraodcastReceiver来接受广播,当收到短信时提示用户。我们既可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。

我们也可以在自己的应用程序中开发BroadcastReceiver,然后把广播接收器这个类或者对象注册到Android操作系统上去,让操作系统知道现在有这样一个广播接收器正在等待接收Android操作系统的广播,即在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。

当有广播事件产生时,Android操作系统首先告诉注册到其上面的广播接收器产生了一个怎么样的事件,每个接收器首先判断是不是我这个接收器需要的事件,如果是它所需要的事件,再进行相应的处理。

例子,我们把骚扰电话的黑名单放到数据库中去,当接到电话时会产生一个接电话事件,事先在Android操作系统中注册一个BroadcastReceiver的对象,当产生事件的时候,会通知我们的广播接收器对象,接收器对象接收到消息之后,就会到数据库里面去取所有黑名单电话和接到的这个电话号码进行比较,如果匹配就直接挂掉。

二、注册BroadcastReceiver的方法

BroadcastReceiver用于监听被广播的事件(Intent),为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:

1.静态注册

静态注册方式是在AndroidManifest.xml的application里面定义receiver并设置要接收的action。

静态注册方式的特点:不管改应用程序是否处于活动状态,都会进行监听。

[html] view plaincopy
  1. <receiver android:name="MyReceiver">  
  2.     <intent-filter>  
  3.         <action android:name="MyReceiver_Action"/>  
  4.     </intent-filter>  
  5. </receiver>  
其中,MyReceiver为继承BroadcastReceiver的类,重写了onReceiver方法,并在onReceiver方法中对广播进行处理。<intent-filter>标签设置过滤器,接收指定action广播。

2.动态注册

动态注册方式在activity里面调用函数来注册,和静态的内容差不多。一个形参是receiver,另一个是IntentFilter,其中里面是要接收的action。

动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。

[java] view plaincopy
  1. MyReceiver receiver = new MyReceiver();  
  2. //创建过滤器,并指定action,使之用于接收同action的广播  
  3. IntentFilter filter = new IntentFilter("MyReceiver_Action");  
  4. //注册广播接收器  
  5. registerReceiver(receiver, filter);  
三、发送广播

[java] view plaincopy
  1. // 指定广播目标Action  
  2. Intent intent = new Intent("MyReceiver_Action");  
  3. // 可通过Intent携带消息  
  4. intent.putExtra("msg""发送广播");  
  5. // 发送广播消息  
  6. sendBroadcast(intent);  
四、注销BroadcastReceiver

[java] view plaincopy
  1. //注销广播接收器  
  2. unregisterReceiver(receiver);  

注:

1.一般在onStart中注册BroadcastReceiver,在onStop中取消BroadcastReceiver。

2.一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)时才有效,当从该函数返回后,该对象就无效的了,结束生命周期。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android-浅谈广播机制,实现强制下线功能(下)
为了便于进行系统级别的消息通知,Android也有自己的一套类似的广播消息机制。
0 0
Android-浅谈广播机制,实现强制下线功能(上)
为了便于进行系统级别的消息通知,Android也有自己的一套类似的广播消息机制。
0 0
Android移动应用基础教程【广播机制】
Android移动应用基础教程【广播机制】
0 0
Android广播机制分析
1.1. 广播简介         Android 广播与生活中的广播概念不同,它是指系统中产生事件后的通知。Android 广播不关心接收者是否收到处理或者如何处理广播,可以说是一种单向的通知。
485 0
Android Studio进行APP设计开发之矢量图及XML文件转换
Android Studio进行APP设计开发之矢量图及XML文件转换
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android插件化:从入门到放弃
立即下载