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);
		}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值