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