美文网首页
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