Android Broadcast Receiver (广播接收者)

一、简介

  Broadcast Receiver是广播接收器,接收自定义和系统的主播。也可以称为监听器。

  Broadcast Intent与Intent一样是通信的媒介,与Intent不同的是Broadcast Intent同时被多个组件接收。

  Broadcast Intent广播机制,广播源发出消息,通过AMS(Activity manager service),可以使多个组件接收同一个消息。与Broadcast Intent成对配合应用的是Broadcast Receiver广播接收器,用于,接收Broadcast Intent广播出的消息。

  Intent与Broadcast Intent对比:

                (示图来源于Android权威指南)

二、Broadcast Receiver注册方式

  1. 静态注册

    静态注册是在AndroidManifest.xml文件中,通过标签<receiver>进行注册,使用标签<intentfilter>设置需要过滤的消息的intent。此种注册方式的生命周期是依随应用程序,在程序结束后接收到消息,程序会自动运行并被接收器事件执行。

 1 <!-- 广播接收类名 -->
 2 <!-- exported设置此broadcast receiver 能否接收其它应用的广播消息 -->
 3 <!-- permission是此广播的权限,只能接收符合权限应用的广播 -->
 4 <receiver
 5     android:name=".TimeBroadCastReceiver"
 6     android:exported="false"
 7     android:permission="com.example.RECEIVER_DEMO">
 8     <!-- priority 有序广播的优先级别 -->
 9     <intent-filter android:priority="100">
10         <!-- 广播消息名称 -->
11         <action android:name="android.intent.action.ACTION_TIME_TICK" />
12     </intent-filter>
13 </receiver>

  (1). exported是设置是否接收其它应用发出的广播,默认值是通过是否有intent-filter为设置,有intent-filter为true,反之为false。当为true时,接收其它应用广播消息。

  (2).android:permission是设置广播权限,只有接收申请了此权限的应用的广播。

  2. 动态注册

    动态注册是使用registerReceiver(...)方法进行注册,在此种注册方式中,Broadcast的生命周期与应用程序一样,在程序结束时,即结束。也可通过unRegisterReceiver(...)方法注销Broadcast。

 1 // 接收者收到消息后,处理函数回调handler
 2 mTimeReceiver = new TimeBroadCastReceiver(mHandler);
 3 IntentFilter intentFilter = new IntentFilter();
 4 // 广播消息名称
 5 intentFilter.addAction(Intent.ACTION_TIME_TICK);
 6 intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
 7 // 有序广播优先级别
 8 intentFilter.setPriority(100);
 9 // 注册广播类
10 registerReceiver(mTimeReceiver, intentFilter);

  3. 自定义权限

1 <!-- 自定义权限名称,即注册一个新的权限 -->
2 <permission android:name="com.example.RECEIVER_DEMO"/>
3 <!-- 申请权限 -->
4 <uses-permission android:name="com.example.RECEIVER_DEMO"/>

  PS:这两种注册方式的区别在于生命周期的不同,在系统中,一些广播消息只能使用动态注册方式,比如:监听时间。

三、Broadcast Receiver 发送方式

  1. 普通(异步)广播方式

    普通广播方式,也可以称作异步广播,普通广播的消息可以被所有接收者收到,消息传递效率比较高,但缺点是不能将接收消息后的结果传递给下一个接收者,并且不能中止广播Intent的广播。

1 Intent intent = new Intent();
2 intent.setAction(Intent.ACTION_TIME_TICK);
3 intent.setAction(Intent.ACTION_TIME_CHANGED);
4 sendBroadcast(intent);

  2. 有序广播方式

    有序广播通过接收者设置的优先级别(优先级别取值范围-1000~1000之间,1000最高),依次接收广播消息。在接收到广播消息后,可以在Broadcast Intent添加此次接收者的一些数据,传递给下一个广播接收者。但是,此种方式的消息传递效率比较低。

1 Intent intent = new Intent();
2 // 消息名称
3 intent.setAction(Intent.ACTION_TIME_TICK);
4 intent.setAction(Intent.ACTION_TIME_CHANGED);
5 // receiverPermission 消息权限
6 sendOrderedBroadcast(intent, receiverPermission);

  总结:

    1. 普通广播:异步,消息传递效率高,数据不能共享。

    2. 有序广播:同步,消息传递效率低,数据能共享。

四、接收者实现

 1 public class TimeBroadCastReceiver extends BroadcastReceiver
 2 {
 3     protected static final String TAG = "TimeBroadCastReceiver";
 4
 5     @Override
 6     public void onReceive(Context context, Intent intent)
 7     {
 8         switch (intent.getAction())
 9         {
10             case Intent.ACTION_TIME_TICK:
11                 SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss     ");
12                 Date curDate = new Date(System.currentTimeMillis());
13                 String str = formatter.format(curDate);
14                 Log.d(TAG, str);
15                 // 接收到广播后,中止广播
16                 abortBroadcast();
17                 break;
18         }
19     }
20 }

注意:onReceive()方法必须在10秒内完成,如果超出时间,则会抛出“Application No Response”。当onReceive()需要长时间执行时,则需要使用Service来实现(context.startService())。

时间: 2024-10-11 18:03:26

Android Broadcast Receiver (广播接收者)的相关文章

Android中使用广播接收者实现IP拨号

布局文件中定义一下UI,虽然没什么UI..... <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical"

[android] 代码注册广播接收者&amp;利用广播调用服务的方法

利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光 主界面里面 在界面创建的时候开启一下服务普通的startService()方法 发送一条广播出去 获取Intent对象,通过new出来 调用Intent对象的setAction()方法,参数:一般就是包名 调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象 服务里面 新建一个MyService类继承系统的Service类 添加一个自定义的服务的方法callServiceMeth

Android Broadcast Receiver 使用入门

Broadcast Receiver 的使用        1.Broadcast Receiver简介        2.Broadcast Receiver接收系统自带的广播        3.自定义广播        一.Broadcast Receiver简介        Android中的四大组件是 Activity.Service.Broadcast和Content Provider.而Intent是一个对动作和行为的抽象描述,负责组件之间程序之间进行消息传递.那么Broadcas

Android面试收集录2 Broadcast Receiver详解

1.Broadcast Receiver广播接收器简单介绍 1.1.定义 Broadcast Receiver(广播接收器),属于Android四大组件之一 在Android开发中,Broadcast Receiver的应用场景非常多.广播,是一个全局的监听器,属于Android四大组件. Android 广播分为两个角色:广播发送者,广播接收者. 1.2.作用 用于监听/接收 应用发出的广播消息,并做出响应. 应用场景 a.不同组件之间通信(包括应用内/不同应用之间) b.与Android系统

Android开发- Intent和Broadcast Receiver

Intent是一种消息传递机制,可以在应用程序内使用,也可以在应用程序间使用.可以用于: 使用类名显示启动一个特定的Service或者Activity. 启动Activity或者Service来执行一个动作的Intent,通常需要使用特定的数据,或者对特定的数据执行动作. 广播某个时间已经发生. 使用Intent来启动Activity 显式启动新的Activity Intent intent = new Intent(MyActivity.this, SelectHorseActivity.cl

14_Android中Service的使用,关于广播接收者的说明

?? 服务:长期后台运行的没有界面的组件 android应用:什么地方需要用到服务? 天气预报:后台的连接服务器的逻辑,每隔一段时间获取最新的天气信息 股票显示:后台的连接服务器的逻辑,每隔一段时间获取最新的股票信息 mp3播放器: 后台长期的播放音乐. new Thread(){}.start(); 子线程没有界面,也是长期后台运行的. android系统进程管理是按照一定的规则的: 1.应用程序一旦被打开 通常情况下关闭(清空任务栈)后进程不会停止.方面下一次快速启动. 带来内存不足的问题.

Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介

通过第一篇的讲解,我们已经看到了如何使用Intent来启动新的应用程序组件,但是实际上他们也可以使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Intent可以在进程之间发送结构化的消息.因此,通过实现Broadcast Receiver来监听和响应应用程序内的这些Broadcast Intent. 通过使用Intent来广播一个事件,可以在不修改原始的应用程序的情况下,让我们开发人员对事件做出反应.Android大量使用了Broadcast Rec

Android中Intent具体解释(二)之使用Intent广播事件及Broadcast Receiver简单介绍

通过第一篇的解说,我们已经看到了怎样使用Intent来启动新的应用程序组件,可是实际上他们也能够使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Intent能够在进程之间发送结构化的消息. 因此,通过实现Broadcast Receiver来监听和响应应用程序内的这些Broadcast Intent. 通过使用Intent来广播一个事件,能够在不改动原始的应用程序的情况下.让我们开发者对事件做出反应.Android大量使用了Broadcast Rec

广播接收者(Broadcast Receiver)

独立寒秋,湘江北去,橘子洲头. -–毛泽东<沁园春·长沙> 广播 广播类型 有序广播 无序广播 特殊的广播接收者 注册广播接收者的两种方式 系统广播示例 接收系统发送的广播 示例-短信到来 自定义无序广播示例 创建广播 接收广播方式静态注册 接收广播方式代码注册 自定义有序广播示例 发送有序广播 接收有序广播 有序广播结果 特殊的广播接收者-锁屏等等 广播 听广播要有:电台 收音机 音乐广播 Android系统内部已经定义好了电台 ,也已经定义好了一些广播事件 比如外拨电话 短信到来 SD卡状