【教学课件】第9章BroadcastReceiver的使用.ppt
《【教学课件】第9章BroadcastReceiver的使用.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章BroadcastReceiver的使用.ppt(28页珍藏版)》请在三一办公上搜索。
1、第9章 BroadcastReceiver的使用,网络资源:,QQ号:1281147324,QQ群:490420731(Android编程入门),主要内容,9.1 BroadcastReceiver介绍,广播是一种广泛运用在应用程序之间传输信息的机制,而BroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。,BroadcastReceiver 本质上是一种全局监听器,用于监听系统全局的广播消息,因此它可以非常方便地实现系统中不同组件之间的通信。,BroadcastReceiver用于接收指定的广播,广播的发送是通过调用Context.sendBroadcast()、
2、Context.sendOrderedBroadcat()来实现的。通常一个广播可以被订阅了该Intent的多个广播接收者所接收,如同一个广播台,可以被多位听众收听一样。,9.1 BroadcastReceiver介绍,BroadcastReceiver自身并不实现图形用户界面,但是当它收到某个消息后,可以启动Activity作为响应,或者通过NotificationManager提醒用户,或者启动Service等等。,启动BroadcastReceiver通常需要以下两步:1、创建Intent,指定BroadcastReceiver的特征;2、调用Context的sendBroadcast(
3、)(发送普通广播)或sendOrderedBroadcast()(发送有序广播)方法来发送广播,触发指定的BroadcastReceiver。当应用程序发出一个广播之后,所有匹配该Intent的BroadcastReceiver都有可能被启动。,9.1 BroadcastReceiver介绍,开发自己的BroadcastReceiver与开发其他组件一样,只需要继承Android中的BroadcastReceiver基类,然后实现里面的相关方法即可。,public class MyBroadcastReceiver extends BroadcastReceiver public void o
4、nReceive(Context context,Intent intent),在onReceive()方法中,接收了一个Intent的参数,通过它可以获取广播所携带的数据。,9.1 BroadcastReceiver介绍,创建完广播接收者后,并不能马上使用,还必须为它注册一个指定的广播,就如同我们有了收音机后,还必须选择收听哪个频道一样。在Android中为BroadcastReceiver注册广播有两种方式:静态注册和动态注册。,静态注册:是指在AndroidManifest.xml文件中进行注册。,9.1 BroadcastReceiver介绍,MyBroadcastReceiver m
5、yBroadcastReceiver=new MyBroadcastReceiver();IntentFilter filter=new IntentFilter();registerReceiver(myBroadcastReceiver,filter);,动态注册:需要在代码中动态的指定广播地址并注册,通常是在Activity或Service中调用ContextWrapper的registerReceiver(BroadcastReceiver receiver,IntentFilter filter)方法进行注册。,9.1 BroadcastReceiver介绍,注册完成后,即可接收相应
6、的广播消息。一旦广播(Broadcast)事件发生后,系统就会创建对应的BroadcastReceiver实例,并自动触发它的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。,如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在广播接收者的onReceive()方法里执行一些耗时的操作,否则会弹出ANR(Application No Response)对话框。,注意,如果确实需要根据广播来完成一项比较耗时的操作,则可以考虑通过Intent启动一个
7、Service来完成该操作。不应考虑使用新线程去完成耗时的操作,因为BroadcastReceiver本身的生命周期极短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经退出了。,如果广播接收者所在的进程结束了,虽然该进程内还有用户启动的新线程,但由于该进程内不包含任何活动组件,因此系统可能在内存紧张时优先结束线程。这样就可能导致BroadcastReceiver启动的子线程不能执行完成。,9.2 发送广播的两种方式,广播接收者注册好了以后,并不会直接运行,必须在接收广播后才会被调用,因此,必须首先发送广播,在Android中提供了两种发送广播的方式,调用Cont
8、ext的sendBroadcast()或sendOrderedBroadcast()方法。sendBroadcast(Intent intent):用于发送普通广播,其中intent参数表示接收该广播的广播接收者所需要满足的条件,以及广播所传递的数据;sendOrderedBroadcast(Intent intent,String receiverPermission):用于发送有序广播,intent参数同上,receiverPermission表示接收该广播的许可权限。,9.2 发送广播的两种方式,普通广播(Normal Broadcast):是完全异步的,可以在同一时刻(逻辑上)被所有接
9、收者接收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。,有序广播(Ordered Broadcast):该广播的接收者将按预先声明的优先级依次接收广播。有序广播接收者可以终止广播的传播(通过调用abortBroadcast()方法),广播的传播一旦终止,后面的接收者就无法接收到广播。另外,广播的接收者可以将数据传递给下一个接收者(通过setResultExtras(Bundle bundle)方法)。,发送有序广播示例,public class ABroadcastReceiver extends Broadcas
10、tReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,“A is Invoked!”,Toast.LENGTH_SHORT).show();,public class BBroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,“B is Invoked!”,Toast.LENGTH_SHORT).sh
11、ow();,编写三个广播接收器类,分别为:ABroadcastReceiver、BBroadcastReceiver、CBroadcastReceiver,内容为显示相应提示信息,public class CBroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,“C is Invoked!”,Toast.LENGTH_SHORT).show();,在清单文件中注册广播接收器,尝试改变优先级大小,观看效果,publ
12、ic class MainActivity extends Activity public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent=new Intent();sendOrderedBroadcast(intent,null);,发送普通广播和发送有序广播对比,发送有序广播,public class MainActivity extends Activity public void
13、onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent=new Intent();sendBroadcast(intent);,发送普通广播,public class BBroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Bundle bundle=getResultE
14、xtras(true);Toast.makeText(context,“B is Invoked!”+“得到的信息”+bundle.getString(“A”),Toast.LENGTH_SHORT).show();,有序广播中,广播接收器间传递数据,public class ABroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,A is Invoked!,Toast.LENGTH_SHORT).show();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 BroadcastReceiver 使用

链接地址:https://www.31ppt.com/p-5659590.html