一、BroadcastReceiver概述 1、作用 是Android系统的四大组件之一,是一种全局监听器,监听系统全局的广播消息(比如:电量低、来电、来短信等系统消息,或一些自定义的广播消息)。 当收到所关注的的广播消息后,做出相应的处理 2、实现步骤 (1)前提——有一个广播消息来源,应用程序通过Context类的sendBroadcast(Intent intent)方法,发出一个广播消息Broadcast Intent,在发送这个Broadcast的时候,需要指定Intent的Action属性,作为广播的订阅标志。 系统会发出很多广播消息,也可以自定义广播消息。 (2)创建一个类继承BroadcastReceiver,覆盖其onReceive()方法,为这个广播接收者的业务方法。 (3)到清单文件中注册这个广播接受者,并且订阅关注的广播内容,订阅方式有两种: 方法一、通过清单文件的intent-filter的action属性来设定订阅标志。 <receiver android:name=".IncomingSMSReceiver"> IncomingSMSReceiver为创建的广播接收者 <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 系统的来短信广播事件 </intent-filter> </receiver> 方法二、在代码中进行订阅(也要先注册这个组件) <receiver android:name=".IncomingSMSReceiver"> </receiver> IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); IncomingSMSReceiver receiver = new IncomingSMSReceiver(); registerReceiver(receiver, filter); 3、onReceive()方法详解 是广播接收者的业务处理方法,当有相关的广播事件发生时,系统会自动创建BroadcastReceiver实例,并自动触发其onReceive()方法。 注意:onReceive()方法必须在10秒内执行完成,否则Android会认为该程序无响应,因此,不要在onReceive()方法中执行耗时操作,否则会弹出无响应对话框,程序崩溃。 如果确实需要进行耗时操作,可以在onReceive()方法中启动一个service来在后台完成该操作。 4、广播的分类 有序广播Ordered Broadcast和普通广播Normal Broadcast(无序) 分别由两个方法来发送: sendBroadcast() sendOrderedBroadcast() Normal Broadcast:在同一时刻被所有的接受者同时接受到,消息传递的效率比较高。但是不能进行广播拦截,接收者不能将处理结果传递给下个接收者。 Ordered Broadcast:所有广播接受者按照设定的优先级顺序依次接受Broadcast,优先级顺序在intent-filter的android:priority属性中设定,数值越大优先级别越高,范围在-1000---+1000。首先接收广播的接受者可以再次存入数据,将数据送给下个接受者。 比如:系统收到短信,发送的广播为有序广播,要拦截短信,可以设置优先级比系统的短信收件箱高,从而阻止用户收到短信。(系统来电也是类似,可以实现黑名单的电话拦截) 5、BroadcastReceiver和各类监听器的区别 对于手机来电,可以由BroadcastReceiver来接收广播,触发其onReceive()方法;也可以用在TelephonyManager对象上注册通话状态的监听器PhoneStateListener来实现来电状态的监听(后面在讲Receiver组件的时候会讲到),那么两种有何区别呢? file:///C:\Users\ZHANGW~1\AppData\Local\Temp\ksohtml\wpsC4A3.tmp.jpg
|