美文网首页
Android_04 BrodcastReceiver

Android_04 BrodcastReceiver

作者: MengkZhang | 来源:发表于2019-05-14 09:21 被阅读0次

    官方API解释:
    Base class for code that will receive intents sent by sendBroadcast().

    If you don't need to send broadcasts across applications, consider using this class with [LocalBroadcastManager] instead of the more general facilities described below. This will give you a much more efficient implementation (no cross-process communication needed) and allow you to avoid thinking about any security issues related to other applications being able to receive or send your broadcasts.

    详细信息参考API文档



    一:为什么需要广播接收者

    • [1]什么样的人听广播:司机 学生 老人等等
    • [2]要听广播的条件:电台 收音机 广播节目频率
    • [3]Android内部定义好了电台 已经定义好了一些广播事件 如 外拨电话 短信到来 SD卡状态 电池电量等等(相当于电台)
    • [4]用Broadcareceiver去接收系统已经定义好的广播事件

    二:广播接收者的使用步骤

    外拨电话的广播

    • 1,定义一个类继承Broadcareceiver,重写onReceive方法

    • 2,在清单文件中注册广播,设置意图过滤器,添加动作


    • 3,在onReceive方法中写业务逻辑


    这里外拨电话需要添加用户权限

        <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    

    监听SD卡状态的广播

    注意了:在监听SD卡状态的时候,必须配置一个data 约束类型为file,因为SD卡里面存放的是file文件

    当SD卡状态改变时执行该方法


    监听短信的到来的广播

    1,设置短信到来的动作
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />

    2,设置监听短信到来的权限

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    

    3,用SmsMessage对象来监听短信的到来

    监听安装或者卸载应用程序的广播

    1,设置监听安装或者卸载程序的动作
    注意了:这里需要设置一个data 约束类型为package 因为安装或者卸载的是包
    <data android:scheme="package"/>

    示例代码:

    监听开机启动的广播

    1,添加动作和设置用户权限

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    

    示例代码:

    三:有序广播

    1,有序广播类似于中央发文件 一级一级的向下发
    2,有序广播的特点
    有序广播可以被终止
    有序广播的数据可以被修改

    示例代码:

    1,创建工程发送自定义的有序广播
    发送自定义广播
    2,创建工程接收有序广播

    2.1设置动作 注意了:这里的动作必须与发送有序广播的程序设置的动作保持一致
    2.2设置接收有序广播的优先级

    注册第一个接收者

    2.3可以修改有序广播的数据 并向下发送

    第一个接收者
    3,然后可以有第2个 第三个广播接收者
    注册第二、第三个接收者

    第二、三个接收者
    4,注意了 :有序广播可以有最终的广播接收者 该广播接收者定义在发送有序广播的工程内,并不需要在清单文件中注册。此时需要修改发送 有序广播的方法中的一个参数(添加上最终的广播接收者)
    最终的接收者
    修改发送自定义广播方法的参数

    四:无序广播

    无序广播 就像新闻联播一样 每天晚上7点准时开播
    特点:
    1,无序广播不能被终止
    2,无序广播的数据不能被修改

    示例代码:
    1,创建工程 发送无序广播

    2,创建工程 接收无序广播

    <receiver android:name=".MyReceiver">
        <intent-filter>
            <action android:name="com.mmk.app"/>
        </intent-filter>
    </receiver>
    

    五:动态注册的广播

    特殊的广播事件

    操作特别频繁的广播事件 如屏幕的解锁和锁屏 电池电量的变化等等 这类广播事件在清单文件中注册是无效的 需要在代码中动态注册

    屏幕的锁屏和解锁,示例代码:

    1,创建广播接收者

    2,在MainActivity的onCreate方法中动态注册广播

    image.png

    3,注意了 动态注册广播的情况下,按下返回键的时候报错如下:也是就忘记了取消注册

    08-16 02:30:58.207: E/ActivityThread(6784): Activity com.example.day07_08teshu.MainActivity has leaked IntentReceiver com.example.day07_08teshu.ScreenRecei@b64b40d8 that was originally registered here. Are you missing a call to unregisterReceiver()?
    

    解决方案:在onDestroy方法中取消注册

    相关文章

      网友评论

          本文标题:Android_04 BrodcastReceiver

          本文链接:https://www.haomeiwen.com/subject/bbrjaqtx.html