Android7.1 新增开机广播过滤(只有特定apk可以接收开机广播)

2023-10-17 00:28

本文主要是介绍Android7.1 新增开机广播过滤(只有特定apk可以接收开机广播),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求

对开机广播进行过滤,只有特定的apk才能接收开机广播(包名白名单、或者包名前缀匹配)。

二、需要修改的地方

对于广播的过滤,在frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java这个文件里:

BroadcastQueue.java是Android系统中的一个类,用于管理和处理广播消息的队列。
在Android系统中,广播是一种用于在应用程序之间传递消息的机制。当某个应用程序发送广播时,其他应用程序可以注册相应的广播接收器来接收并处理这些广播消息。
BroadcastQueue.java类负责管理和调度广播消息的传递。它维护了一个广播消息队列,并按照一定的优先级和顺序处理这些消息。它还负责将广播消息分发给注册了相应广播接收器的应用程序。

三、实现

在BroadcastQueue.java修改processNextBroadcast()方法
在这里插入图片描述
r.intent.getAction()可以获取要处理的广播,这里匹配开机广播
info.activityInfo.applicationInfo.processName获取apk包名,传入自定义方法isInWhiteList(),该方法用于检查apk是否在白名单中

如果广播为开机广播并且不在白名单中,仿照上面的代码对广播进行处理然后return

注意:许多系统必要的应用都需要接收开机广播自启,需要在白名单中添加这些apk的包名

以下代码可以获取接收开机广播的apk的包名

		PackageManager packageManager = getPackageManager();
// 创建一个Intent对象,表示开机广播Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED);List<ResolveInfo> receivers = packageManager.queryBroadcastReceivers(bootIntent, 0);for (ResolveInfo receiver : receivers) {String packageName = receiver.activityInfo.packageName;String className = receiver.activityInfo.name;// 处理应用程序信息,例如打印或存储到列表中Log.d("", "Package: " + packageName + ", Class: " + className);}

这篇关于Android7.1 新增开机广播过滤(只有特定apk可以接收开机广播)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/221712

相关文章

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

Redis如何实现刷票过滤

《Redis如何实现刷票过滤》:本文主要介绍Redis如何实现刷票过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言一、概述二、技术选型三、搭建开发环境四、使用Redis存储数据四、使用SpringBoot开发应用五、 实现同一IP每天刷票不得超过次数六

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.