Android受限广播(protected-broadcast)

Permission Denial: not allowed to send broadcast in android 注 意:只有系统appliaction才能在其AndroidManifest.xml中定义Protected Broadcast,系统appliaction包括/system/framework、/system/app、vendor/app下的 package,因此设备中安装的第三方apk中如果定义了Protected Broadcast,那么这个Protected Broadcast将不生效。代码中可以看到<protected-broadcast>标记的具体写法,如下。 阅读详情

在阅读Android源码Telephony模块时,发现在AndroidManifest.xml文件里声明了大量的protected-broadcast:


<protected-broadcast android:name=
"android.intent.action.DATA_SMS_RECEIVED" />


<protected-broadcast android:name=
"android.provider.Telephony.SMS_RECEIVED"
/>

...


声明的都是一些广播action,比如新短信到达的广播"android.provider.Telephony.SMS_RECEIVED",显然这些广播action都是很重要的广播,并不能随随便便发送,所以android就做了限制。而直接从protected-broadcast字面意思来看,是受保护的广播,确实也是如此:


protected-broadcast用来指定一个广播,该广播只能被系统发送,如果普通APP在自己的xml里声明了这些广播,发送时也会被提示错误。"Permission Denial: not allowed to send broadcast"


那么谁有权限来发送这些广播呢?也就是说所谓的系统APP都有哪些呢?

这里直接说结论:


发送广播最终都会通过AMS(ActivityManagerService)来发送,而在最终调用里,会看到有关protected-broadcast的判断

/*
* Prevent non-system code (defined here to be non-persistent
* processes) from sending protected broadcasts.
*/


int callingAppId = UserHandle.getAppId(callingUid);
if (callingAppId == Process.SYSTEM_UID
||callingAppId == Process.PHONE_UID
||callingAppId == Process.SHELL_UID
||callingAppId == Process.BLUETOOTH_UID
||callingAppId == Process.NFC_UID
||callingUid == 0) {
// Always okay.
} else {
..........
}



所以可以看出是通过UID来过滤的,SYSTEM_UID,PHONE_UID,SHELL_UID,BLUETOOTH_UID,NFC_UID,以及root(uid == 0).


/**
* Defines the root UID.
* @hide
*/

public static final int ROOT_UID = 0;

/**
* Defines the UID/GID under which system code runs.
*/


public static final int SYSTEM_UID = 1000;

/**
* Defines the UID/GID under which the telephony code runs.
*/

public static final int PHONE_UID = 1001;

/**
* Defines the UID/GID for the user shell.
* @hide
*/

public static final int SHELL_UID = 2000;

/**
* Defines the UID/GID for the log group.
* @hide
*/

public static final int LOG_UID = 1007;


PID 和 UID


PID:为Process Identifier,PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。linux中进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大。


UID:一般理解为User Identifier,UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理。而在android 中又有所不同,除了进行权限控制之外,Android还使用它来进行一些数据的共享,这也就是在AndroidManifest.xml里使用android:sharedUserId的作用,使用同一个sharedUserId的两个不同APP,可以运行在同一个进程,并且可以相互访问数据。而普通的两个不同APP,是不能随意相互访问数据的,只能通过跨进程访问。


如果连接真机通过ps命令查看所有进程,可以看到第一列是user,这就是UID的描述


Android 中broadcast 发送过程解析 来源: https://blog.youkuaiyun.com/shift_wwx/article/details/81227435 前言: 上一篇博文Android 中broadcast 注册过程解析详细的解析了广播的注册过程,最终AMS 端的mRegisteredReceivers 保存了所有的动态注册进来的广播,并且一一对应ReceiverDispatcher。这一篇接着解析广播的另一... 阅读详情

相关推荐

Android进阶之路 - 那些年忽视的系统广播

因为最近写了自启动、网络监听等功能,发现都是接收的系统广播,所以索性抽时间去整理了一下系统自带广播,顺带给自己补补课 ~ 整理的资料是综合多篇Blog、Android SDK 、And Search 修修补补而来 ~ 根据个人习惯划分了耳熟能详(常用)、寡闻少见(较少)、原始权威(SDK) 稍有欠缺,明日补齐 贴士: //监听广播时前缀有Intent. 如下示例:开机广播 Intent.ACTION_BOOT_COMPLETED 耳熟能详寡闻少见原始权威留心注意课外读物 耳熟能详 广播

Android、前端、小程序、后端 1674

protected-broadcast 的一些细节

protected-broadcast 的一些细节★ 1. 引言注:本文中提及的“广播(Broadcast)”,“广播事件”和“Action”的意思大致相同。发送广播(sendBroadcast)也是发送一个指定的action给BroadcastReceiver。在本文中不严格区分“广播”和“Action”,除非有地方特别说明。对于 android 系统应用来说,运用protected-broadc

Abracadabra的专栏 1万+

高频功率放大器的设计实现

摘 要 随着无线通信技术的高速发展,市场对射频电路的需求越来越大,同时对射频电路的性能要求也越来越高。高频功率放大器是位于无线发射级末端的重要部件,为了弥补信号在无线传输过程中的衰耗,要求发射机具有较大功率的输出,通信距离越远,要求的输出功率越大。在高频范围内,为了获得足够大的高频输出功率,就要采用高频功率放大器。 本次课程设计的高频功率放大器的技术指标包括输出功率、效率、功率增益、由于高频频功率放大器的输出功率比较大,耗能比较多,所以工作效率就显得比较重要。本课程设计的高频功率放大器电路由两极功率放大器

qq_43543515的博客 3万+

protected-broadcast的作用

protected-broadcast(暂时从网上搜到这么多,也不知对错,先留着) “保护性广播”,在一些AndroidManifest.xml中的一级标记<protected-broadcast>,具体有何作用: 此处指定一个广播,该广播只能被系统发送。 注 意:只有系统appliaction才能在其AndroidManifest.xml中定义Protected Broadca...

hnlgzb的专栏 2747

高精度计算Π的值(C语言)

题目要求 限制使用双向链表作存储结构,请根据用户输入的一个整数(该整数表示精确到小数点后的位数,可能要求精确到小数点后500位),高精度计算PI值。可以利用反三角函数幂级展开式来进行计算。 输入5 输出3.14159 思路分析 反三角函数幂级展开式 由公式可以看出,只要计算出来每一个R(n)的值再相加取二倍就可以得到Π的值。 经过推算,要是令R(1)=2,只需要将每个R(n),相加即可。 因...

weixin_46251155的博客 8033

SDM660电源部分配置:

SDM660电源部分配置: Panel power supplies 1、Reference power supplies Description Name Regulator Voltage (V) Panel power supply 0 vddio PMIC 660/L11 1.8 Panel power supply 1 Lab PMIC 660/lab 4.6 Panel power s...

weixin_41811215的博客 4728

protected-broadcast 规范使用(ERROR: Sending non-protected broadcast)

这是我在一次开发中出现的,系统中需要发送一个应用自定义的广播,send 之后会报出Sending non-protected broadcast 的异常。借此机会来解析protected broadcast 的使用,我们在中了解了broadcast 发送的整个过程,通过Context 的接口最终会调用到AMS 中broadcastIntent()。

私房菜 5万+

告别倍福开发板:手把手教你用SSC工具为STM32生成EtherCAT从站代码

本文详细介绍了如何使用SSC工具为STM32生成EtherCAT从站代码,帮助开发者在不依赖倍福开发板的情况下实现高效的工业以太网通信。通过SSC工具的配置、XML文件设计、代码移植与硬件适配等步骤,开发者可以轻松构建自定义的EtherCAT通信系统,提升工业自动化项目的灵活性和效率。

weixin_33925615的博客 410

protected-broadcast广播

如果isCallerSystem为true,则会调用如下代码,方法checkBroadcastFromSystem检查是否为protected-broadcast,如果不是,则打印“Sending non-protected broadcast”代码在frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java 中,2中所说的异常对应的代码如下。对于isCallerSystem的判断如下。

weixin_38816898的博客 941

从VASP数据到LAMMPS模拟:手把手教你用DeePMD-kit搭建Cr-Si-Fe合金势函数

本文详细介绍了使用DeePMD-kit从VASP数据构建Cr-Si-Fe合金深度势能模型的全流程,包括数据准备、模型训练、优化及LAMMPS集成。通过实战教程,帮助研究者掌握DeePMD-kit训练技巧,实现高精度分子动力学模拟,提升材料计算效率。

weixin_33737134的博客 521

android 受限广播,Android受限广播(protected

在阅读Android源码Telephony模块时,发现在AndroidManifest.xml文件里声明了大量的protected-broadcast:'android.intent.action.DATA_SMS_RECEIVED' />...声明的都是一些广播action,比如新短信到达的广播'android.provider.Telephony.SMS_RECEIVED',显然这些广播...

weixin_39693193的博客 973

AutoSAR实验视频讲解:相关资料下载

AutoSAR实验视频讲解:闪烁一颗LED实验【相关资料下载】 总目录 为了方便大家自己的实验顺利进行,这里我们准备了一些实验中可能用到的资料供大家使用 介绍 这里主要是三个文件: MyApp_Core.0是我们的用户代码,在工程集成那集将会讲解 McalConfig.arxml就是我们的Mcal导出文件,用于导入到DaVinci中生成代码 CAN.dbc文件是我们的通信矩阵文件 以上几个文件都是简单的配置,不具有实际项目的实用性,大家仅供参考 // 顺便吐槽一句:百度网盘的吃相真的难看 下载连接

雪云飞星的博客 6668

android受限广播保护机制,Android受限广播保护机制

广播(Broadcast)作为消息传递的一种方式,在Android系统中有着广泛的应用。系统提供了一系列的广播发送、接收接口,可以非常方便的实现广播的传递。系统中相当部分的状态变化也都是通过广播的方式通知到应用的,例如:系统启动完成(Intent.ACTION_BOOT_COMPLETED),电池状态变化(Intent.ACTION_BATTERY_CHANGED),网络连接状态变化(Intent...

weixin_39718173的博客 472

基于Simulink的光伏电站AGC/AVC协调控制仿真

摘要:本文基于Simulink构建光伏电站AGC/AVC协调控制仿真模型,通过分层控制架构实现有功-无功解耦与储能协同。系统包含100kW光伏阵列、50kWh储能及逆变器组件,采用PID控制器实现AGC频率调节(±0.1Hz)和Q-V下垂控制实现AVC电压稳定(±2%)。仿真验证了三种工况下协调控制的有效性:正常调度时储能充电20kW;负荷突增时储能15kW放电维持频率;光照骤降时储能30kW放电并吸收2kVAR无功稳定电压。结果表明,该方案可使频率/电压偏差分别控制在0.1Hz和7.6V内,响应时间&lt

xiaoheshang_123的博客 235

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android受限广播保护机制

广播(Broadcast)作为消息传递的一种方式,在Android系统中有着广泛的应用。系统提供了一系列的广播发送、接收接口,可以非常方便的实现广播的传递。系统中相当部分的状态变化也都是通过广播的方式通知到应用的,例如:系统启动完成(Intent.ACTION_BOOT_COMPLETED),电池状态变化(Intent.ACTION_BATTERY_CHANGED),网络连接状态变化(Intent

苏白的专栏 8945

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[RK3399][Android7.1] 调试笔记 --- Sending non-protected broadcast ...

Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 使用自定义的广播,然后用命令行测试的时候出现如下warning: 1300 D AndroidRuntime: Calling main entry com.android.commands.am.Am 01-01 08:00:36.945 610 1072 E ActivityManager...

Kris Fei's blog 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

protected-broadcast 规范使用系统应用组件自定义广播

保护广播一、android:sharedUserId=”android.uid.system” 系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加 android:sharedUserId=”android.uid.system”,然后在Android.mk中增加 LOCAL_CERTIFICATE := platform.如Setting

TaylorPotter的博客 2万+

Android添加受保护广播(三十八)

栗子: &lt;protected-broadcast android:name="android.intent.action.TEST”&gt;: ”android.intent.action.TEST“:此广播是受保护的广播,该广播只能被系统级app发送. 1.frameworks/base/core/res/AndroidManifest.xml添加 &lt;protected-broad...

Android系统攻城狮 3714

定义一个新的protected-broadcast广播

一、android:sharedUserId=”android.uid.system”系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加 android:sharedUserId=”android.uid.system”,然后在Android.mk中增加 LOCAL_CERTIFICATE := platform。2,被定义为protected-broadcast的广播--受保护的广播,只能是拥有系统权限的APP,其他APP没有权限发送该类广播。

weixin_45494251的博客 727

Android 发送广播

发送广播各个APP可以通过binder调用AMS的广播发送接口,发送广播,各个APP是消息发布/订阅模型中的消息发布端使用实例广播按照处理的速度分为:前台广播和后台广播 广播按照AMS处理方式分为:普通广播和有序广播 同时还有黏性广播和非黏性广播(已经废弃,不做分析)普通广播的发送Intent intent = new Intent("Test"); //这个flag表明接收该广播的receiv

chenweiaiyanyan的专栏 4712

Protect Broadcast 保护广播

一、android:sharedUserId=“android.uid.system” 系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加 android:sharedUserId=“android.uid.system”,然后在Android.mk中增加 LOCAL_CERTIFICATE := platform.如ZsDeskcloc...

Rookie20190715的博客 1252

android p 受保护的广播

android 通过AMS发送广播时,会判断需要发送的广播是否是受保护的广播 @GuardedBy("this") final int broadcastIntentLocked(ProcessRecord callerApp, String callerPackage, Intent intent, String resolvedType, ...

wangjicong_215的博客 1204
上一篇: ubuntu 之间免密码 scp 文件传输
下一篇: protected-broadcast 规范使用系统应用组件自定义广播
vrix
博客等级 码龄24年 673粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值