在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过 滤接收的过程: 首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。 当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若 匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要 实现onReceive()方法。 注册BroadcastReceiver有两种方式: 一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。 另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter对象,然后在需要注册的地方调 Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。如果用动 态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。 另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。 同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。 动态注册: IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(String);--为 BroadcastReceiver指定action,使之用于接收同action的广播 registerReceiver(BroadcastReceiver,intentFilter); 一般:在onStart中注册,onStop中取消unregisterReceiver 发送广播消息:extends Service 指定广播目标Action:Intent Intent = new Intent(action-String) --指定了此action的receiver会接收此广播 需传递参数(可选) putExtra(); 发送:sendBroadcast(Intent); |
在BroadcastReceiver配置里intent-filter:action //用于标示接收什么样的action
在Activity要广播的地方设置Intent.setAction();sendBroadcast(in);
也可以在其中动态注册BroadcastReceiver
BroadcastReceiver生命周期:
只是在其onReceiver方法执行的时候才是active;inactive状态下其随时会被系统回收
在onReceiver里执行很耗时的工作时应该开启一个独立的线程。但是一旦onReceiver返回后(不管新线程有没有执行完),
系统都会认为这些资源处于inactive。
也不能bindService。道理同线程
解决方案是在onReceiver里startService,让service完成工作
在BroadcastReceiver配置里intent-filter:action //用于标示接收什么样的action
在Activity要广播的地方设置Intent.setAction();sendBroadcast(in);
也可以在其中动态注册BroadcastReceiver。
1.创建Broadcast,首先要有部件发送Broadcast,发送Broadcast的代码如下
Intent intent1 = new Intent(AC1);//AC1为reciver的动作名称。
sendBroadcast(intent1);
此处的AC1要定义:
static final String AC1 = "com.test.action.NEW_BC1";
2.定义Broadcast的动作:
注意:定义中的"com.test.action.NEW_BC1"是要在Menifest.xml文件中定义的,如下所示:
<receiver android:name="TestRC">
<intent-filter>
<action
android:name="com.test.action.NEW_BC1"/>
</intent-filter>
</receiver>
3.定义BroadcastReciver对象
其中android:name="TestRC"的意思是:该BroadcastReciver对象的名字是TestRC,这个对象接受动作为com.test.action.NEW_BC1 的Broadcast,其定义如下:
public class TestRC extends BroadcastReceiver {
public static int NOTIFICATION_ID = 21321;
Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
Toast.makeText(context, "widget已启动", 0);
showNotification();
}
private void showNotification(){
NotificationManager notificationManager = (NotificationManager) context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon, "bc1", System.currentTimeMillis());
PendingIntent contentItent = PendingIntent.getActivity(context, 0, new Intent(context, Main.class), 0); //Main.class为Broadcast的发出对象
notification.setLatestEventInfo(context, "在bc1中", null, contentItent);
notificationManager.notify(NOTIFICATION_ID, notification);
}
}
分享到:
相关推荐
### 01 Broadcast简介 **普通广播** 是BroadcastReceiver的基本形式,通过`Context.sendBroadcast()`方法发送。这些广播是异步的,意味着它们同时传递给所有注册的接收者,而且执行速度非常快。然而,由于接收者的...
一、Broadcast机制简介 Broadcast广播是Android系统中的一种全局通知机制,用于在整个系统中传播事件。当一个Broadcast被发送时,所有注册了与该Broadcast匹配的BroadcastReceiver(广播接收器)都会收到这个消息,...
6. `README.md`: 这通常是一个Markdown格式的文件,包含了项目简介、安装指南、使用方法等信息,对理解项目很有帮助。 7. `gradle.properties`: 这个文件存储了Gradle构建的全局属性,如版本号和代理设置。 8. `...
### Android的Broadcast Receiver应用机制 #### 一、BroadcastReceiver简介 在Android开发中,四大核心组件包括:Activity、Service、BroadcastReceiver以及Content Provider。其中,BroadcastReceiver是一种特殊...
#### uTESLA简介与挑战 uTESLA是一种轻量级的广播认证协议,最初设计用于分布式传感器网络。然而,由于其参数初始化依赖于单播通信方式,这限制了其在网络规模较大时的应用能力。尤其是在大规模部署的情况下,单播...
【BroadcastClient】是一个关于Android广播(Broadcast)的学习Demo,它主要展示了如何在Android应用程序中使用BroadcastReceiver进行消息传递和接收。BroadcastReceiver是Android系统中一个关键的组件,它允许应用...
1. **ADB简介** ADB是Android开发的核心部分,它提供了与Android设备交互的命令行接口。通过ADB,开发者可以安装应用、查看设备状态、执行shell命令以及发送各种类型的数据,包括广播。 2. **发送广播的命令格式**...
本研究探讨了如何将广播(Broadcast)与组播(Multicast)技术有效地整合到后5G(Beyond 5G,简称B5G)以及6G网络环境中。随着移动通信技术的不断发展,从5G向更高版本演进的过程中,广播和组播技术的应用成为提高...
文章目录Android四大组件之Broadcast Receiver概述广播接收器(Broadcast Receiver)Broadcast Receiver简介Broadcast Receiver的注册一. 静态注册二. 动态注册三. 本地广播发送Broadcast Receiver广播的三种发送...
SMPTE ST 2021-1 是一个重要的标准,它定义了2017年版的广播交换格式(Broadcast Exchange Format, BXF),旨在促进媒体和娱乐行业中不同系统之间的元数据交换。该标准是SMPTE(电影与电视工程师协会)制定的一系列...
### UMTS与LTE简介 UMTS(Universal Mobile Telecommunications System,通用移动通信系统)是继GSM之后的第二代移动通信技术标准,主要提供高速数据传输服务。而LTE(Long Term Evolution,长期演进)则是在UMTS...
Intent broadcastIntent = new Intent("android.intent.action.MY_BROADCAST"); broadcastIntent.putExtra("msg", "Hello from sender"); sendBroadcast(broadcastIntent); ``` #### 五、注意事项 - **权限...
Android框架包括了一系列关键组件,如Activity、Service、Broadcast Receiver和Content Provider,它们共同构成了Android应用的基础架构。 Activity是Android中的可视化用户界面,每个具有用户界面的应用至少包含一...
#### WM_POWERBROADCAST消息简介 `WM_POWERBROADCAST`是Windows系统发送的一种消息类型,当电源管理模块发生特定事件时,该消息会被发送到所有已注册接收此消息的应用程序窗口。通过监听这个消息,我们可以检测到...
1. 当一个广播 `Intent` 被发送(通常通过 `Context.sendBroadcast()`、`Context.sendOrderedBroadcast()` 或 `Context.send StickyBroadcast()`)时,系统会检查所有已注册的 `BroadcastReceiver`,根据它们的 ...
在Android系统中,广播(Broadcast)是一种非常重要的组件,它使得应用程序之间能够相互通信,即使这些应用在后台运行或者完全未启动。Android广播分为两种主要类型:有序广播(Ordered Broadcast)和无序广播...
**Android简介** Android是一种开源的、基于Linux内核的操作系统,主要应用于移动设备,如智能手机和平板电脑。自2008年首次发布以来,它已经发展成为全球最广泛使用的移动操作系统之一,由Google公司领导的开放...
在Gennum的产品线中,"Broadcast VideoSpring 2010 Product Guide"详细介绍了他们的一系列产品,包括以下几个关键领域: 1. **Equalizers**:这些设备用于补偿长距离传输后SDI信号可能出现的衰减和失真,确保信号的...
#### 二、Linux Bridge简介 Linux Bridge是Linux内核中的一个虚拟网络设备,它可以模拟出一个物理交换机的功能,用于连接不同的虚拟网络接口。在OpenStack中,Linux Bridge常被用来创建虚拟局域网(VLAN),实现不同...
ZooKeeper的核心要点包括一致性协议Zab(ZooKeeper Atomic Broadcast),它是一种用于实现ZooKeeper服务一致性的协议。Zab协议确保了ZooKeeper状态机的一致性,并支持崩溃恢复。ZooKeeper还利用了数据复制,以保证...