深入理解Android广播机制与实战

3星 · 超过75%的资源 需积分: 9 10 下载量 116 浏览量 更新于2024-09-20 收藏 99KB DOC 举报
"Android广播机制详解及代码实践" 在Android开发中,广播机制(BroadcastReceiver)是一种重要的组件,用于处理系统或应用中特定事件的发生。广播可以让应用之间进行轻量级的通信,即使发送方和接收方并不直接了解彼此。本文档将深入探讨Android广播机制的各个方面,包括其基本概念、API的使用、自定义BroadcastReceiver的创建、发送自定义广播的方法,以及通过Context发送广播的不同方式,并提供了一个简单的广播示例。 1. 广播BroadcastReceiver是什么? BroadcastReceiver就像现实生活中的广播电台,当某个事件发生时,系统会发送广播通知,而BroadcastReceiver则扮演收音机的角色,监听并响应这些事件。例如,系统可能会发送来电、短信到达等广播。应用可以通过注册BroadcastReceiver来接收感兴趣的消息,并在onReceive()方法中执行相应的处理。广播的发送与接收是解耦的,发送者不知道谁会接收,接收者也无法得知发送者是谁。 2. BroadcastReceiver及其常用API BroadcastReceiver是所有广播接收器的基类。要创建一个BroadcastReceiver,你需要创建一个新的类并继承BroadcastReceiver,然后重写onReceive()方法。在这个方法内,你可以根据Intent的action来判断是否处理该广播。以下是一些常用的BroadcastReceiver API: - `abortBroadcast()`: 用于终止有序广播,只对sendOrderedBroadcast()发送的广播有效,阻止后续接收者接收广播。 - `clearAbortBroadcast()`: 取消之前调用`abortBroadcast()`设置的终止状态,恢复有序广播的传递。 - `getAbortBroadcast()`: 返回布尔值,表示广播是否已被终止。 - `getResultCode()`: 获取当前广播的返回码,由之前的接收者设置。 - `getResultData()`: 获取当前广播附带的数据,同样由之前的接收者设置。 - `setResultCode(int code)`: 设置广播的返回码,供后续接收者或发送者查询。 - `setResultData(String data)`: 设置广播携带的数据。 3. 自定义BroadcastReceiver 创建自定义BroadcastReceiver,需要编写一个继承BroadcastReceiver的类,并在onReceive()方法中实现具体的业务逻辑。注册BroadcastReceiver可以通过在AndroidManifest.xml中静态注册,或者在运行时动态注册。 4. 发送自定义广播 应用可以使用`Context.sendBroadcast(Intent)`来发送广播,其中Intent包含广播的action和其他数据。如果需要按顺序处理广播并获取接收者的响应,可以使用`Context.sendOrderedBroadcast(Intent, String)`。 5. Context中的两种发送广播方式 - 静态注册:在AndroidManifest.xml中声明BroadcastReceiver,这样应用启动时BroadcastReceiver就会自动激活,但可能会增加内存消耗。 - 动态注册:在代码中使用`Context.registerReceiver(BroadcastReceiver, IntentFilter)`注册,灵活性更高,但需要在不再需要时手动调用`Context.unregisterReceiver(BroadcastReceiver)`来释放资源。 6. 广播的简单示例 一个简单的BroadcastReceiver实例可能如下: ```java public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("com.example.MY_ACTION")) { // 处理感兴趣的广播 Toast.makeText(context, "Received custom broadcast", Toast.LENGTH_SHORT).show(); } } } // 动态注册 IntentFilter filter = new IntentFilter("com.example.MY_ACTION"); registerReceiver(new MyReceiver(), filter); // 发送广播 Intent intent = new Intent("com.example.MY_ACTION"); sendBroadcast(intent); ``` 以上内容详细解释了Android广播机制的核心概念和操作步骤,为开发者提供了理解与实践广播机制的基础。通过灵活运用BroadcastReceiver,开发者可以在应用间实现高效的通信和事件响应。