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

需求不讲了,目的是当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(
                mM
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值