BroadcastReceiver

前言

本文通过学习官方文档学习,简单学习BroadReceiver的基本用法。主要通过一些简单的例子,BroadReceiver对象的方法去学习如何发送和接收广播。.

广播接收者

Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。举例来说,Android 系统会在发生各种系统事件时发送广播,例如系统启动或设备开始充电时。再比如,应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件(例如,一些新数据已下载)。

应用可以注册接收特定的广播。广播发出后,系统会自动将广播传送给同意接收这种广播的应用。

一般来说,广播可作为跨应用和普通用户流之外的消息传递系统。但是,您必须小心,不要滥用在后台响应广播和运行作业的机会,因为这会导致系统变慢。

简而言之:就像收音机一样,广播发送者就像电台125.25频率的电台,广播接收者就是收听125.25频道的司机。

一些例子

动态注册广播:registerReceiver(Receiver,IntentFilter)

监听电量变化

由于我们监听是系统的广播,所以我们已经知道了电台的频道号。现在我需要接收电台的信息,接收到信息后做相应的处理操作。
第一步需要一个收音机声明广播接收者类:继承BroadcastReceiver实现onReceiver方法,(上下文,Intent传递数据)
第二步需要收听的频道:new IntentFilter();
intentfilter.addAction(Intent.ACTION_BARTERY_LOW)
电量由三个,changed ,low 和
第三步注册广播:this.registerReceiver(Receiver,intentfilter);

在第一步的接收器(收音机测试数据变化。)通过Intent获取相关的数据。
Action:change通过BatteryManager看里面所可以获取的数据。通过intent.getExtra(key);

最后一步:在onDestory方法:
调用unregisterReceiver();防止内存泄漏;

监听USB线拨出以及插入

registerReceiver(Receiver,intentfilter);

第一步:继承BroadcastReceiver实现onReceiver方法,(上下文,Intent传递数据)
第二步需要收听的频道:new IntentFilter();
intentfilter.addAction(Intent.ACTION_POWER_CONNECTION).
intentfilter.addAction(Intent.ACTION_POWER_DISCONNECTION).

第三步注册广播:this.registerReceiver(Receiver,intentfilter);

第四步:通过判断onReceiver方法中intent.getAction值,来对不同的action做逻辑处理.

广播分类

有序广播和无序广播.

广播注册方式

静态注册和动态注册

动态注册广播

主要有:registReceiver(Receiver,IntentFilter);
在Receiver对收到的数据进行处理
在onDestory方法中解绑Receiver防止内存泄漏.

静态注册广播监听关机

静态注册:比较耗费资源,一直都在监听着.
主要步骤:

  1. 继承BroadcastReceiver
  2. 在manifest中静态注册Receiver并且设置IntentFilter, ;
    3.需要权限获取开机权限

监听应用安装与下载

  1. 继承BroadcastReceiver
  2. 静态注册 intentFilter中action:PACKAGE_REMOVE,PACKAGE_ADD.data:shceme="package"用于过滤信息
  3. 在Receiver,通过intent获取Action.判断remove和add来处理卸载和安装的逻辑.intent.getData();查看详情.在根据信息做String.replace.

自定义广播

sendBroadcast(intent);

  1. new Intent(); intent.setAction(“包名.大写名字”);
  2. 设置数据,intent.putExtra(key,value);
  3. sendBroadcast(intent);

广播接收者;intentfilter:action=“包名.大写名字”
onReceiver中intent.getExtra(key)获取数据

有序广播

无序广播:一发出来,所有人都能监听到不能阻止.所有人都能就监听.
有序广播:1.有序2.可以终止往下传递,3.可以修改广播内容

有序

步骤一:
intent.setAction(“包名.大写名字”)
sendOrderBroadcast(intent,receiverPremission);

步骤二:
创建3个Receiver:
intent-filter的属性priority=“数值” 数值优先级:-1000-1000
intent-filter的方法: action=“包名.大写名字”

步骤三:
设置3个不同优先级的priority:1000,500,200

在三个Receiver中:onReceiver中对数据进行处理.

终止往下传达

在高优先级的Receiver中,
在onReceiver方法中,abortBroadcast();

修改广播内容

Bundle.putCharSequence(“content”,value);
sendOrderBroadcast(intent,null,null,null,Activity.RESULT_OK,null,Bundle);

(intent,接受权限,resultReceiver,Handler,初始码,用于数据传递,封装数据)
resultReceiver:广播接收者最终接收者,用于检查数据是否传达和数据是否修改.
handler:上面接收者的回调.
初始码:结果码,根据结果码
用于传递数据:这个数据在各个Receiver
Bundle:用于封装数据

在Intent的获取数据 getResultExtras;返回Bundle对象
resultExtra的getCharSequence(“content”).toString;

修改内容:
resultExtra的putCharSequence(“content”,value);
setResultExtras(resultExtras);

广播权限

广播权限谁可以接收到我的广播:

第一步: 定义权限:

第二步:先构建
sendOrderBroadcast(intent,Manifest.permission.大写权限)

在先的App中要收到该广播必须声明该权限.

注册广播, 意图过滤action.

广播接收者谁可以给我发权限

第一步: 定义权限:

第二步:在Receiver中实现Permission接收,静态注册中,在receiver android:permission=“包名.大写权限”;

在发送广播中的必须声明权限

才能够发送广播

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值