Android检测注册的broadcast receiver

Android检测注册的broadcast receiver

检查系统的注册的广播接收器有两个路径

静态注册检测

静态注册的广播接收:getPackageManager().queryBroadcastReceivers()
系统有现成的东西

动态注册检测

动态注册就有点麻烦,我们先看下动态注册系统到底是怎么走的?
动态注册有一下几个方法,最后都是到

//android.app.ContextImpl.class
  private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,
            IntentFilter filter, String broadcastPermission,
            Handler scheduler, Context context, int flags) 
//com.android.server.am.ActivityManagerService.class
public Intent registerReceiver(IApplicationThread caller, String callerPackage,
            IIntentReceiver receiver, IntentFilter filter, String permission, int userId,
            int flags)

具体代码其实就是:

//新建立的ReceiverList(代表BroadcastReceiver),放入AMS中已经注册的mRegisteredReceivers
                //(相当于在AMS中动态注册的所有BroadcastReceiver),这个是注册的角度的变量,用来通过这个寻找广播的接收者。
                mRegisteredReceivers.put(receiver.asBinder(), rl);

所以获取动态注册的广播关键就是在mRegisteredReceivers。
然后发现ams里面的dump会把这个部分给dump出来。

//com.android.server.am.ActivityManagerService.class
dumpBroadcastsLocked()

套路来了:dumpsys activity broadcasts

ReceiverList{20cf1c3 10919 com.android.settings/1000/u0 remote:d6c0972}
    app=10919:com.android.settings/1000 pid=10919 uid=1000 user=0
    Filter #0: BroadcastFilter{fe8a40}
      Action: "android.bluetooth.adapter.action.STATE_CHANGED"
      Action: "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED"
      Action: "android.bluetooth.adapter.action.DISCOVERY_STARTED"
      Action: "android.bluetooth.adapter.action.DISCOVERY_FINISHED"
      Action: "android.bluetooth.device.action.FOUND"
      Action: "android.bluetooth.device.action.DISAPPEARED"
      Action: "android.bluetooth.device.action.NAME_CHANGED"
      Action: "android.bluetooth.device.action.ALIAS_CHANGED"
      Action: "android.bluetooth.device.action.BOND_STATE_CHANGED"
      Action: "android.bluetooth.device.action.PAIRING_CANCEL"
      Action: "android.bluetooth.device.action.CLASS_CHANGED"
      Action: "android.bluetooth.device.action.UUID"
      Action: "android.intent.action.DOCK_EVENT"
      AutoVerify=false

这样就知道动态注册了啥了。。。

才疏学浅,敬请指教。谢谢。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值