Android BroadcastReceiver详解:创建与广播机制

需积分: 9 2 下载量 176 浏览量 更新于2024-08-13 收藏 884KB PPT 举报
Android四大组件之一的BroadcastReceiver是Android系统中一个关键的部分,它扮演着全局监听器的角色,用于监听并处理系统发送的广播消息。广播机制在Android中是一种消息订阅与发布的模式,使得应用程序之间能够相互通信,实现跨组件的功能交互。 创建无序广播是通过Context.sendBroadcast(Intent)方法实现的,这种方法发送的是普通广播,这种广播是非同步的,能够在同一时间被所有注册的BroadcastReceiver接收到,因此具有较高的消息传递效率。然而,普通广播的一个缺点是接收者无法将处理结果传递给其他接收者,也不能主动终止广播的传播。 BroadcastReceiver的创建通常涉及继承BroadcastReceiver类,并重写onReceive()方法,这个方法会在接收到广播时被调用,接收者在此方法内进行相应的处理逻辑。例如: ```java public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 在这里编写接收广播后的具体操作 } } ``` 为了订阅特定的广播,开发者可以选择两种方式。首先,在AndroidManifest.xml文件中,通过<receiver>标签声明接收器,并设置<intent-filter>来指定接收的动作,如接收短信的到达事件: ```xml <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> ``` 另一种订阅方式是程序运行时动态注册接收器,通过IntentFilter和registerReceiver()方法: ```java IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); MyReceiver receiver = new MyReceiver(); registerReceiver(receiver, filter); ``` 发送广播则涉及到创建一个Intent对象,指定广播的Action(比如ACTION_NEW_OUTGOING_CALL),然后使用Context.sendBroadcast(Intent)发送出去。例如: ```java Intent intent = new Intent(Intent.ACTION_NEW_OUTGOING_CALL); intent.putExtra(Intent.EXTRA_PHONE_NUMBER, "13811479528"); Context.sendBroadcast(intent); ``` 总结来说,BroadcastReceiver在Android开发中扮演了重要的角色,通过它,应用可以响应和处理来自系统或其他应用的各种事件,实现了跨组件间的通信,增强了Android应用的灵活性和扩展性。