安卓代码实现:接收到广播后,获取广播发送者包名

本文介绍了如何在Android应用中,当接收到广播时,如何获取广播发送者的包名、PID和UID。通常的方法只能获取到当前应用的包名,而实际需要的是发送广播的应用信息。通过分析广播发送原理和使用`adb shell dumpsys activity broadcasts`命令,可以获取到广播详细信息,包括发送者数据。最终,通过在代码中执行ADB命令并解析输出来实现这一目标。

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

需求不讲了,目的是当app收到广播时,需要获取到发送者的包名(及pid、uid)。
关键字:onReceive、ComponetName、broadcasts、adb shell dumpsys activity broadcasts

一、普通方法不可行

一般来讲,通过如下方法,只是获取到当前的报名而非发送者包名,并非期望结果:

 @Override
    public void onReceive(Context context, Intent intent) {
   
        Log.d(TAG, "---onReceive: " + intent.getComponent() == null ? "null" : intent.getComponent().getPackageName());
    }

二、相关知识

发送广播原理,不在重复介绍,可以参考现有文章:Broadcast机制源码详解-处理

从源码角度看,在发送广播初始阶段,会存储广播相关信息,这里就包括发送广播的应用报名,进程等。mMainThread.getApplicationThread(),在后面逻辑,会通过进程号来获取到报名。activityThread里都有这些信息可查。

 public void sendBroadcast(Intent intent) {
   
        warnIfCallingFromSystemProcess();
//1. 返回 intent的 MIME data type  
        String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
        try {
   
            intent.prepareToLeaveProcess();
//2.直接调用ams的方法.
            ActivityManagerNative.getDefault().broadcastIntent(
                mMainThr
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
OSZAR »