Android学习笔记四大组件之BroadcastReceiver

来源:互联网 发布:淘宝打假2016多久结束 编辑:程序博客网 时间:2024/05/22 01:33
在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. 自定义类,继承自BroadcastReceiver2. (静态注册)在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


0 0
原创粉丝点击