A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马