深入分析 Android BroadcastReceiver (七)

文章目录

    • 深入分析 Android BroadcastReceiver (七)
      • 1. 高级应用场景
        • 1.1 示例:动态权限请求
        • 1.2 示例:应用内通知更新
      • 2. 安全性与性能优化
        • 2.1 示例:设置权限防止广播攻击
        • 2.2 示例:使用 LocalBroadcastManager
        • 2.3 示例:在生命周期中注册和取消注册广播接收器
      • 3. 总结

深入分析 Android BroadcastReceiver (七)

1. 高级应用场景

  1. 动态权限请求

在 Android 6.0(API 23)及以上,应用需要在运行时请求权限。BroadcastReceiver 可以用来监听权限变化,并在权限授予或拒绝后采取相应的措施。

1.1 示例:动态权限请求

请求权限:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);

处理权限请求结果:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == REQUEST_CAMERA_PERMISSION) {if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 权限授予,发送广播Intent intent = new Intent("com.example.PERMISSION_GRANTED");sendBroadcast(intent);} else {// 权限被拒绝Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();}}
}

监听权限变化的广播接收器:

public class PermissionReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if ("com.example.PERMISSION_GRANTED".equals(intent.getAction())) {// 处理权限授予后的操作Toast.makeText(context, "Camera permission granted", Toast.LENGTH_SHORT).show();}}
}// 在 Manifest 文件中声明接收器
<receiver android:name=".PermissionReceiver"><intent-filter><action android:name="com.example.PERMISSION_GRANTED"/></intent-filter>
</receiver>
  1. 应用内更新通知

通过广播机制可以实现应用内的通知更新,例如某个模块发生了数据更新,需要通知其他模块进行相应的操作。

1.2 示例:应用内通知更新

发送广播通知:

Intent intent = new Intent("com.example.DATA_UPDATED");
intent.putExtra("data", "New data available");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

接收广播通知:

@Override
protected void onStart() {super.onStart();IntentFilter filter = new IntentFilter("com.example.DATA_UPDATED");LocalBroadcastManager.getInstance(this).registerReceiver(dataUpdateReceiver, filter);
}@Override
protected void onStop() {super.onStop();LocalBroadcastManager.getInstance(this).unregisterReceiver(dataUpdateReceiver);
}private final BroadcastReceiver dataUpdateReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String data = intent.getStringExtra("data");// 处理数据更新Toast.makeText(context, "Data updated: " + data, Toast.LENGTH_SHORT).show();}
};

2. 安全性与性能优化

  1. 避免广播攻击

公共广播可能会被恶意应用利用进行广播攻击,导致安全问题。为广播接收器设置合适的权限可以有效防止此类攻击。

2.1 示例:设置权限防止广播攻击

发送广播时设置权限:

Intent intent = new Intent("com.example.SECURE_ACTION");
sendBroadcast(intent, "com.example.MY_PERMISSION");

接收器声明权限:

<receiver android:name=".SecureReceiver" android:permission="com.example.MY_PERMISSION"><intent-filter><action android:name="com.example.SECURE_ACTION"/></intent-filter>
</receiver>
  1. 使用 LocalBroadcastManager

LocalBroadcastManager 仅在应用内部进行广播通信,具有更高的安全性和效率。

2.2 示例:使用 LocalBroadcastManager

发送本地广播:

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent("com.example.LOCAL_EVENT");
localBroadcastManager.sendBroadcast(intent);

接收本地广播:

@Override
protected void onStart() {super.onStart();IntentFilter filter = new IntentFilter("com.example.LOCAL_EVENT");LocalBroadcastManager.getInstance(this).registerReceiver(localEventReceiver, filter);
}@Override
protected void onStop() {super.onStop();LocalBroadcastManager.getInstance(this).unregisterReceiver(localEventReceiver);
}private final BroadcastReceiver localEventReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 处理本地事件Toast.makeText(context, "Local event received", Toast.LENGTH_SHORT).show();}
};
  1. 合理的生命周期管理

在组件的生命周期中合理注册和取消注册广播接收器,避免内存泄漏和资源浪费。

2.3 示例:在生命周期中注册和取消注册广播接收器
@Override
protected void onStart() {super.onStart();IntentFilter filter = new IntentFilter("com.example.SOME_ACTION");registerReceiver(someReceiver, filter);
}@Override
protected void onStop() {super.onStop();unregisterReceiver(someReceiver);
}private final BroadcastReceiver someReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 处理接收到的广播}
};

3. 总结

广播机制在 Android 中是一个非常灵活和强大的组件通信方式,适用于多种应用场景。通过系统广播、自定义广播、有序广播和本地广播,可以实现多样化的通信需求。在实际应用中,开发者需要结合具体需求,选择合适的广播机制,并通过优化策略提升应用的性能和安全性。

  • 动态权限请求:使用广播机制监听权限变化,及时处理权限授予或拒绝后的操作。
  • 应用内更新通知:通过广播实现模块间的数据更新通知,保持组件间的松耦合。
  • 安全性优化:通过设置权限和使用 LocalBroadcastManager 提升广播的安全性,避免广播攻击。
  • 性能优化:合理管理广播接收器的生命周期,避免内存泄漏和资源浪费。

通过合理运用广播机制及其优化策略,开发者可以有效提升应用的可维护性、稳定性和安全性,从而构建高质量的 Android 应用。

欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/366579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【博主推荐】HTML5实现简洁好看的个人简历网页模板源码

文章目录 1.设计来源1.1 主界面1.2 关于我界面1.3 工作经验界面1.4 学习教育界面1.5 个人技能界面1.6 专业特长界面1.7 朋友评价界面1.8 获奖情况界面1.9 联系我界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c…

食品行业的安全护照:企业发展不可或缺的认证导航

在全球化的食品市场中&#xff0c;安全、质量和环境保护是企业通往成功的三大支柱。对消费者而言&#xff0c;这些因素是选择产品的核心考量&#xff1b;对企业来说&#xff0c;则是赢得市场和信任的基石。从农田到餐桌&#xff0c;食品的每一次加工和转换都承载着对健康和环境…

20240703 每日AI必读资讯

&#x1f916;爆火Character AI惨遭阉割 美国00后集体“失恋” - Character AI曾是00后最火爆的社交软件&#xff0c;但用户发现对话模型变得冷淡&#xff0c;失去趣味。 - 用户流失严重&#xff0c;面临成本高、竞争激烈的挑战&#xff0c;甚至遭到挖角。 - 尽管困难重重&a…

RabbitMQ进阶篇

文章目录 发送者的可靠性生产者重试机制实现生产者确认 MQ的可靠性数据持久化交换机持久化队列持久化消息持久化 Lazy Queue(可配置~)控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 消费者的可靠性消费者确认机制失败重试机制失败处理策略 业务幂等性唯一消息ID业…

springboot数字化医院产科系统源码

目录 一、系统概述 二、开发环境 三、功能设计 四、功能介绍 一、系统概述 数字化产科是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。该系统由门诊系统、住院系统、数据统计模块三部分组成&#xff0c;与医院HIS、LI…

智能版面设计:指令跟随模型在自动布局规划中的应用

在广告行业一个吸引人的视觉布局能够显著提升信息的传播效果。但对于非专业设计师来说&#xff0c;创建既美观又功能性强的布局常常是一项挑战。他们往往缺乏必要的设计技能、审美训练或资源来快速实现创意构想。传统的设计软件和在线工具虽然提供了一些模板和指导&#xff0c;…

让 SwiftUI 原生 TabView 支持标签页切换转场动画

功能需求 何曾几时,秃头码农们多么希望 SwiftUI 里原生 TabView 的标签页切换能够有转场动画效果。 如上图所示,我们在 SwiftUI 原生 TabView 视图的标签页切换时展现出美美哒的转场动画,本实现支持最新的 iPadOS 18 和 iOS 18 系统。这是怎么做到的呢? 在本篇博文中,您…

Windows 组策略编辑器怎么打开,这两种方法你必须知道

组策略编辑器&#xff08;Group Policy Editor, 简称 GPEdit.msc&#xff09;是 Windows 操作系统中一个强大的工具&#xff0c;主要用于管理和配置系统设置、安全选项、用户权限等&#xff0c;尤其适用于企业环境中批量部署和管理策略。 尽管家庭版 Windows&#xff08;如 Win…

文章智能改写工具哪个好?什么文都能改的智能写作工具

在学术探索的广袤海域中&#xff0c;撰写论文是一项考验我们知识深度和创新能力的必经之路。 我们可能会在这片海洋中遇到内容雷同、创意匮乏的暗礁。但不必惊慌&#xff0c;免费智能改写工具就像一盏导航明灯&#xff0c;照亮我们前行的道路。 今天&#xff0c;让我们一起探…

【postgresql】数据库操作

创建数据库 使用 CREATE DATABASE SQL 语句来创建 语法&#xff1a; CREATE DATABASE dbname; 使用 createdb 命令来创建 语法&#xff1a; createdb [option...] [dbname [description]] 参数说明&#xff1a; dbname&#xff1a;要创建的数据库名。 description&…

win11电源设置

把钩子去掉以后 win11的电脑关机才有用 否则&#xff0c;关机了&#xff0c;电脑也实际上一直在运行

计算机网络之入门

1.网络的发展 1.1计算机网络定义 计算机网络是以共享资源&#xff08;硬件、软件和数据等&#xff09;为目的而连接起来的、在协议控制下&#xff0c;由一台或多台计算机、若干台终端设备、数据传输设备等组成的系统之集合。 这些计算机系统应当具有独立自治的能力&#xff…

fastapi swagger js css 国内访问慢问题解决

fastapi swagger js css 国内访问慢问题解决 直接修改fastapi包中静态资源地址为如下地址 swagger_js_url: str "https://cdn.bootcdn.net/ajax/libs/swagger-ui/3.9.3/swagger-ui-bundle.js", swagger_css_url: str "https://cdn.bootcdn.net/ajax/libs/sw…

什么方法能快速分享视频给他人?视频二维码提供预览的制作技巧

现在想要分享一个或者多个视频时&#xff0c;很多人会选择将视频生成二维码的方法来展现视频内容&#xff0c;通过这种方式可以让多人同时扫码查看同一个视频&#xff0c;有效提升其他人获取内容的速度及视频传播的效率。那么视频转换成二维码的方法是什么样的呢&#xff1f; …

深入解析:Java爬虫的本质是什么?

深入解析&#xff1a;Java爬虫的本质是什么&#xff1f; 引言&#xff1a; 随着互联网的快速发展&#xff0c;获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序&#xff0c;能够模拟人类浏览器的行为&#xff0c;从网页中提取所需信息&#xff0c;成为了…

STM32存储左右互搏 模拟U盘桥接QSPI总线FATS读写FLASH W25QXX

STM32存储左右互搏 模拟U盘桥接QSPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘&#xff0c;通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接Quad SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种…

通过百度文心智能体创建STM32编程助手-实操

一、前言 文心智能体平台AgentBuilder 是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&#xff0c;打造大模型时代的产品能力。开发者可以通过 prompt 编排的…

开放签电子签章,让签字有迹可循

开放签&#xff08;企业版&#xff09;V2.0.5版本上线后&#xff0c;系统支持一键查询电子文件的签署操作记录&#xff0c;支持一键生成详细的签署记录报告&#xff0c;详细请看下图&#xff1a; 1、操作记录详情&#xff1a; 从合同发起、填写、签署、撤销等环节全流程展示操…

由监官要求下架docker hub镜像导致无法正常拉取镜像

问题&#xff1a;下载docker镜像超时 error pulling image configuration: download failed after attempts6: dial tcp 202.160.128.205:443: i/o timeout解决办法&#xff1a;配置daemon.json [rootbogon aihuidi]# cat /etc/docker/daemon.json {"registry-mirrors&qu…

[Information Sciences 2023]用于假新闻检测的相似性感知多模态提示学习

推荐的一个视频&#xff1a;p-tuning P-tunning直接使用连续空间搜索 做法就是直接将在自然语言中存在的词直接替换成可以直接训练的输入向量。本身的Pretrained LLMs 可以Fine-Tuning也可以不做。 这篇论文也解释了为什么很少在其他领域结合知识图谱的原因&#xff1a;就是因…