BroadcastReceiver(广播接收者)

本文深入讲解了Android中广播接收器的基础知识,包括其作用、注册方式、生命周期、广播分类及安全性控制等内容,并提供了实例说明如何实现不同类型的广播接收。
1. 是Android 的四大组件之一.
2. 广播的接收器的作用: a, 完成Android应用程序内部组件于组件的通信(传递数据)
                                        b, 实现Android应用程序和应用程序之间的通信(跨进度的通信)
                                        c, 监听系统的一些状态变化, 可以让自己的应用程序根据系统的变化做出相应的响应.
3. 用广播接收器所涉及到的相关内容(广播接收器实现通信的模型)
                a,  广播接收器(BroadcastReceiver)
                b,  广播(是Intent)
                c,  广播的发送方(调用sendBroadcast方法)
4. 广播接收器有2种注册方式:
                a,静态注册
                        注册方式:  在配置文件中通过<receiver>标签注册
                b,动态注册
                        注册方式:  在代码中通过调用registerReceiver()方法实现对一个广播接收器的注册
                        官方建议:  注册应该在Activity的onResume生命周期中实现,解除注册在Activity的onPause生命周期中实现.(目的:减轻系统负载)
5. 如何通过代码实现对广播接收器的2种注册:
            a, 继承BroadcastReceiver抽象类,实现其中的抽象方法(onReceive方法).
            b, 创建广播接收器子类对象(由自己创建[动态注册的时候]或者由系统创建[静态注册的时候])
            c, 通过注册方式实现对广播接收器的注册(指明广播接收器所能接收的广播类型)
            d, 创建广播对象(Intent对象)
            e,  调用发送广播的方式把广播发送出去
6. 静态注册的广播接收器和动态注册的广播接收器的区别:
        动态注册的接收器只能在程序[注册有接收器的界面处于运行状态的时候]运行的时候有效.
        静态注册的接收器在任何情况下都能够接收到对应类型的广播  (静态注册的广播接收器不受应用程序的生命周期影响)

7. 广播接收器的生命周期:
             广播接收器的生命周期就是onReceive()方法执行期间.
             不能在广播接收器的生命周期方法中执行的操作: 1,不能执行异步的操作    2,不能弹对话框以及绑定服务
8.广播接收器运行于那个线程中:在应用程序的主线程中执行
9. 广播的分类:(广播本省不决定类型,类型是由发送方调用不同的方法决定)
        a, 有序广播:  通过sendOrderedBroadcast()方法发送的广播称为有序广播
                    特性:对于广播接收器来说,广播的接收是同步[依次接收]
                              可以通过result以及abort相关的方法实现广播接收器之间的数据传递和广播的中止传递
                                通过android:priority属性实现对于广播接收器的优先的控制[值得大先接收]
       b, 无序广播: 通过sendBroadcast()方法发送的广播称为无序广播
                    特性: 对于所有的广播接收器广播的接收是异步的.一般同时接收到广播.
                              用无序广播发送数据效率会更加高一些.
                              不能使用广播接收器中和result以及abort相关的方法
                              通过andriod:priority属性控制无序广播的接受顺序
10.创建的Intent如果用于广播接收器,如果该Intent中有Activity的启动源和目标Activity, 也是不能启动Activity.
    同样的,把Intent用于启动Activity,如果该Intent中的action值和某一个广播接收器所能接收的广播的类型匹配,这个接收器也是不能接收该Intent.

11.广播的安全性(问题的引入: 广播接收器是可以跨进程实现数据的传递,当数据被别的应用程序接收,可能会被修改)
        1, 定义广播类型值得时候,用本应用程序的包名作为前缀.
        2, 定义带有权限的接收器,控制哪一个应用程序可以往该接收器中发送广播
                a,发送权限广播[控制哪些应用程序能够接收到该广播]:调用send方法的时候传入权限值.
                        实现方式:  发送方-->  1,在配置文件通过<permission>标签定义权限
                                                            2,调用send方法发送广播的时候传入该权限
                                           接收方-->    1,在配置文件通过<permission>标签定义和发送方相同的权限
                                                               2,使用<uses- permission>申请使用该权限
                b,定义权限接收器[控制哪些应用程序能够往接收器中发送广播]: 在注册接收器的时候指定权限.
                              实现方式:   接收方---->1,在配置文件中通过<permission>标签定义权限
                                                                    2,在采用静态方式注册广播接收器的时候,在<receiver>标签中通过android:permission属性设定权限
                                                发送方:   --->1,在配置文件通过<permission>标签定义和发送方相同的权限
                                                                      2,使用<uses-permission>申请使用该权限


        3, 通过广播接收器的android:exported控制接收器是否对外部的应用程序暴露
        4, 在Android4.0中可以通过Intent.setPackage方法传入应用程序的包名,控制广播的定向发发.
        5, 通过LocalBroadcastManager发送本地广播. [所发送的广播只会在应用程序内部,不会发到本应用程序外部]
                                    实现方式: 1, 通过getInstance静态方法获取LocalBroadcastManager对象
                                                     2, 通过管理器对象的registReceiver方法实现广播接收器的注册以及unregistReceiver方法实现解除注册
                                                     3,通过管理对象的sendBroadcast方法实现发送本地广播
                                                      (程序内部如果需要通过广播传递数据, 应该优先选择本地广播方式,这种方式数据传递的效率比较高)

//定义和发送方相同的权限
<permission  android: name/>
//在接收方申请权限
<uses-permission  android: name/> 


12. 通过广播接收器接收系统广播:
            a,监听手机开机
                String action= Intent.ACTION_BOOT_COMPLETED://开机广播接收器的类型
            b,监听手机网络状态

 c,监听手机的来电去电

添加黑名单需要加权限,CALL_PHONE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值