BroadcastReceiver

本文详细介绍了Android中的BroadcastReceiver基础知识,涉及电量变化监听、USB连接状态、广播分类、动态与静态注册、自定义广播、有序广播及权限管理。通过实例演示了如何接收和发送广播,以及避免内存泄漏和合理使用广播机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文通过学习官方文档学习,简单学习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=“包名.大写权限”;

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

才能够发送广播

以下是重新表述后的内容: 单周期 MIPS CPU 的微程序地址转移逻辑设计:在单周期 MIPS CPU 架构中,微程序地址转移逻辑是关键部分。它负责根据当前微指令的执行情况以及 CPU 内部的各种状态信号,准确地计算出下一条微指令的地址。这一逻辑需要综合考虑指令类型、操作完成情况、是否发生异常等多种因素,以确保微程序能够按照正确的顺序和逻辑进行执行,从而实现 MIPS 指令的准确译码与控制。 MIPS 微程序 CPU 的设计:设计一款基于微程序控制的 MIPS CPU,其核心在于构建微程序控制器。该控制器通过存储微指令序列来实现对 CPU 各部件的控制。微指令中包含对数据通路操作的控制信号以及微程序地址转移信息。在设计过程中,需要精心设计微指令格式,使其能够高效地表示各种操作控制信息,同时合理安排微指令存储器的组织结构,确保微指令的快速读取与准确执行,从而实现 MIPS 指令集的完整功能。 MIPS 硬布线控制器的状态机设计:在采用硬布线控制方式的 MIPS CPU 中,状态机是控制器的核心组成部分。状态机根据输入的指令操作码、状态信号等信息,在不同的状态之间进行转换。每个状态对应着 CPU 在执行一条指令过程中的一个特定阶段,如取指、译码、执行、访存等。状态机的设计需要精确地定义各个状态的转换条件以及在每个状态下输出的控制信号,以确保 CPU 能够按照正确的时序和逻辑完成指令的执行过程。 多周期 MIPS 硬布线控制器 CPU 设计(排序程序):设计一款多周期 MIPS 硬布线控制器 CPU,用于运行排序程序。在这种设计中,CPU 的每个指令执行周期被划分为多个子周期,每个子周期完成指令执行过程中的一个特定操作。硬布线控制器根据指令操作码和当前周期状态,生成相应的控制信号来协调 CPU 数据通路的操作。针对排序程序的特点,需要优化控制器的设计,合理安排指令执行的周期划分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值