`

BroadcastReceiver简介

 
阅读更多
BroadcastReceiver作为四大组件之一,觉得跟Activity最大的区别是不怎么跟用户交互,跟Service最大区别是可以广播,将信息发送给诸多用户。
BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。
在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。
Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。
BroadcastReceiver的缺点:效率非常低,如果传递小信息还可以,如果是大规模信息的话就不能胜任了,否则会导致应用非常非常卡。

下面贴个小例子的代码:


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBR extends BroadcastReceiver{

	public static final String Action = "com.example.l303boardcast.intent.action.MyBR";
	
	@Override
	public void onReceive(Context arg0, Intent arg1) {
		System.out.println("BroadcastReceiver:value="+arg1.getStringExtra("txt"));
	}

}

静态注册
静态注册是在AndroidManifest.xml文件中配置的,置了以上信息之后,只要是android.intent.action.MY_BROADCAST这个地址的广播,MyReceiver都能够接收的到。注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.l303boardcast.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="MyBR"></receiver>
    </application>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/but1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发广播" />

    <Button
        android:id="@+id/but2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="绑定广播" />

    <Button
        android:id="@+id/but3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="解除广播 " />

</LinearLayout>
[size=large][color=green]动态注册[/color]
动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播,下面我们就来看一下注册的代码:(绑定广播触发动态注册的事件)[/size]

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener{
	
	private MyBR mybr = new MyBR();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.but1).setOnClickListener(this);
		findViewById(R.id.but2).setOnClickListener(this);
		findViewById(R.id.but3).setOnClickListener(this);
	}

	@Override
	public void onClick(View arg0) {
		switch (arg0.getId()) {
		case R.id.but1:
			Intent intent = new Intent(MyBR.Action);
			intent.putExtra("txt", "吊炸天");
			sendBroadcast(intent);
			break;
		case R.id.but2:
			registerReceiver(mybr, new IntentFilter(MyBR.Action));
			break;
		case R.id.but3:
			unregisterReceiver(mybr);
			break;
		default:
			break;
		}
	}

}


上面是个小例子,补充一下普通广播跟有序广播的区别:
上面的例子就是普通广播:普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
有序广播:
有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
现在这三个接收者的<intent-filter>多了一个android:priority属性,并且依次减小。这个属性的范围在-1000到1000,数值越大,优先级越高。


<intent-filter 
                android:priority="998">
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

分享到:
评论

相关推荐

    Android \BroadCastReceiver 简介

    所以,`BroadcastReceiver` 的生命周期非常短暂,必须高效地处理接收到的广播事件。 在 Android 系统中,`BroadcastReceiver` 是一个关键组件,它允许应用程序对外部事件进行响应,比如系统级别的事件(如电池状态...

    BroadcastReceiver介绍

    ### BroadcastReceiver详细介绍 #### 一、概述 在Android开发中,`BroadcastReceiver`是四大组件之一,主要用于接收并处理系统或应用程序发出的广播消息。通过这种方式,应用之间可以进行简单的通信和交互,使得...

    Android移动应用开发中BroadcastReceiver单元主要内容.pdf

    1. BroadcastReceiver简介 BroadcastReceiver,即广播接收者,主要负责监听和处理系统级别的广播事件。在Android系统中,广播是一种无须直接交互就能传递信息的方式,它可以被用来通知所有感兴趣的应用程序关于特定...

    疯狂Android讲义第10章源码(Android服务Service_详解)

    第10章 Receiver 373  10.1 Service简介 374  10.1.1 创建、配置Service 374 ... 10.8.1 BroadcastReceiver简介 413  10.8.2 发送广播 414  10.8.3 有序广播 416  10.9 接收系统广播消息 424

    android的Broadcast Receiver应用机制

    #### 一、BroadcastReceiver简介 在Android开发中,四大核心组件包括:Activity、Service、BroadcastReceiver以及Content Provider。其中,BroadcastReceiver是一种特殊的组件,它主要用于接收并响应来自系统或其他...

    广播事件处理

    一、BroadcastReceiver简介 BroadcastReceiver是Android系统中用于接收广播Intent的组件,它可以在后台运行,不需用户交互,当系统发出特定的广播时,BroadcastReceiver会自动触发。BroadcastReceiver有两种注册方式...

    Android学习之Service开机启动

    BroadcastReceiver简介** - **定义**:BroadcastReceiver也是Android四大组件之一,用于接收来自系统或其他应用的广播消息。 - **应用场景**:例如接收网络状态改变、电池电量变化等广播。 **3. Android Manifest...

    安卓应用开发考点

    - **知识点7:BroadcastReceiver简介** BroadcastReceiver也是Android四大组件之一,主要用于接收来自系统或其他应用程序的广播事件,例如网络连接变化、电池电量低等。 - **知识点8:注册BroadcastReceiver** ...

    Android核心技术开发与实例详解—目录.pdf

    - **2.2.4 BroadcastReceiver简介**:介绍BroadcastReceiver的作用及其实现方式。 - **2.2.5 ContentProvider简介**:说明ContentProvider的作用以及如何实现数据共享。 - **2.2.6 Intent和IntentFilter简介**:...

    疯狂Android讲义源码

     10.8.1 BroadcastReceiver简介 413  10.8.2 发送广播 414  10.8.3 有序广播 416  10.9 接收系统广播消息 424  10.10 本章小结 427  第11章 多媒体应用开发 428  11.1 音频和视频的播放 429  11.1.1 使用...

    android 问题总结

    - **BroadcastReceiver简介**:`BroadcastReceiver`用于接收系统或其他应用程序广播的消息,通常用于监听系统状态变化(如网络状态改变、电量不足等)或者应用程序之间的简单通信。 - **注册方式**: - 静态注册:...

    Android程序设计-Broadcast.pptx

    ### 01 Broadcast简介 **普通广播** 是BroadcastReceiver的基本形式,通过`Context.sendBroadcast()`方法发送。这些广播是异步的,意味着它们同时传递给所有注册的接收者,而且执行速度非常快。然而,由于接收者的...

    嵌入式android实验报告

    - **Boa简介**:Boa是一款轻量级的Web服务器软件,特别适合用于嵌入式系统。它支持CGI,具有源代码开放、性能高效的特点。 - **移植过程**:首先需要下载Boa的源代码,然后根据嵌入式系统的具体需求对其进行必要的...

    android四大组件简介学习教案.pptx

    Android 四大组件是构成Android应用程序的核心元素,它们分别是Activity、ContentProvider、Service和BroadcastReceiver。这些组件协同工作,构建起Android应用的完整功能体系。 1. **Activity(活动)** Activity...

    Android中BroadcastReceiver(异步接收广播Intent)的使用

    Broadcast Receiver简介 Broadcast Receiver是Android的五大组件之一,使用频率也很高。 用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、广播接收者(BroadcastReceiver)用于异步接收...

    android四大组件简介PPT学习教案.pptx

    Android 四大组件是开发Android应用的核心组成部分,包括Activity、ContentProvider、Service和BroadcastReceiver。这些组件协同工作,使得应用程序能够高效地与用户交互、管理数据、执行后台任务以及响应系统事件。...

    android四大组件简介实用教案.ppt

    Android 四大组件是构成Android应用的核心元素,包括Activity、ContentProvider、Service和BroadcastReceiver。它们各自承担着不同的职责,共同协作实现应用的功能。 1. Activity(活动) Activity是Android应用中...

    Android Broadcast 广播机制 实例

    一、Broadcast机制简介 Broadcast广播是Android系统中的一种全局通知机制,用于在整个系统中传播事件。当一个Broadcast被发送时,所有注册了与该Broadcast匹配的BroadcastReceiver(广播接收器)都会收到这个消息,...

    adb发送广播

    1. **ADB简介** ADB是Android开发的核心部分,它提供了与Android设备交互的命令行接口。通过ADB,开发者可以安装应用、查看设备状态、执行shell命令以及发送各种类型的数据,包括广播。 2. **发送广播的命令格式**...

Global site tag (gtag.js) - Google Analytics