您的位置:首页 > 移动开发 > Android开发

Android学习笔记四大组件之BroadcastReceiver

2016-05-25 16:08 225 查看
在Android中,Broadcast是一种数据传递的方式/通信方式。BroadcastReceiver是Android的核心组件之一。

【广播的分类】
1. 普通广播 / 无序广播
2. 有序广播
3. 粘滞广播(无视)
注册广播接收者
静态注册:常驻型,通过AndroidManifest.xml注册。
动态注册:实时型,在程序中调用registerReceiver(BroadcastReceiver, IntentFilter)注册,使用内部类实现的广播接收者必须动态注册。
普通广播
【普通广播的特性】
1. 由1个发送方和若干个接收方组成
2. 发送方与接收方存在匹配规则(例如电台广播的频道号码)
【发送普通广播】
调用由ContextWrapper定义的sendBroadcast(Intent)方法。
发送广播时使用的Intent对象中,应该封装Action属性,而广播接收者需要使用IntentFilter匹配该广播。
发送广播时,也可以在Intent中封装需要传递的数据,通常使用Intent的Extra属性。
【接收广播】
1. 自定义类,继承自BroadcastReceiver
2. (静态注册)在AndroidManifest.xml中的<application>节点下,添加<receiver>节点对该广播接收者进行注册,并在<receiver>节点下添加<intent-filter>子级节点,用于匹配广播发送时的Intent对象
3. 重写广播接收者类中的onReceive()方法,实现对广播的处理。
有序广播
【有序广播的特性】
广播的接收者们在接收广播时,会遵循一定的顺序先后收到广播。
【发送有序广播】
调用sendOrderedBroadcast(Intent, String)发送即可。其它使用方式参考发送普通广播。
【终止有序广播的传递】
调用abortBroadcast()方法可以终止有序广播的传递。该方法只能在接收有序广播时调用,如果接收普通广播调用该方法会导致RuntimeException。
【篡改有序广播传递的数据】
在有序广播的传递过程中,可以调用setResult???()方法设置需要传递的数据,后续的接收者可以调用getResult???()获取数据,也可以继续调用setResult???()对数据进行篡改。
有序广播的接收者们的优先级
有序广播的接收者们会按照先后顺序接收到广播,优先级越高的,则越先收到广播,优先级越低的,则越后收到广播。
1. 根据注册广播接收者时为IntentFilter配置的priority属性决定优先级,该属性值是int类型,值越大,则优先级越高,反之,优先级越低
2. 当多个广播接收者配置的priority属性值相同时,动态注册的广播接收者的优先级更高,而静态注册的广播接收者的优先级更低
3. 当多个广播接收者配置的priority属性值相同,且注册方式相同时,按照注册的先后顺序,先注册的优先级越高,反之,后注册的优先级越低。如果这些广播接收者归属于不同的应用程序,则按照应用程序的package name排列先后顺序。
拦截呼出电话
【实现原理】
当呼出电话时,系统会发出1个有序广播,并且将呼叫的电话号码使用setResultData(String)进行传递,最后,系统的呼叫程序会收到该广播,并通过getResultData()获取电话号码实现呼叫。
如果需要拦截呼出电话,则自定义广播接收者,接收系统发出的呼出电话广播,获取电话号码进行篡改,并将篡改后的电话号码进行传递。
【广播Action】
android.intent.action.NEW_OUTGOING_CALL
【处理呼出电话的权限】
android.permission.PROCESS_OUTGOING_CALLS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息