Android中如何定位ACTION_AIRPLANE_MODE_CHANGED广播的发送源?
定位ACTION_AIRPLANE_MODE_CHANGED广播发送位置的高效方法
全局源码精准搜索
在AOSP源码根目录用repo grep或者IDE的全局搜索功能,直接定位发送该广播的代码。比如执行命令:repo grep "sendBroadcast.*ACTION_AIRPLANE_MODE_CHANGED" --include="*.java"或者搜索
ACTION_AIRPLANE_MODE_CHANGED的所有引用,再筛选调用sendBroadcast/sendOrderedBroadcast的逻辑。AOSP中该广播的核心发送逻辑通常在frameworks/base/services/core/java/com/android/server/airplane/AirplaneModeController.java,这是系统管理飞行模式状态并发送广播的核心类。通过系统日志抓调用链
不用修改源码,直接用adb抓取系统日志获取广播发送的调用栈:adb logcat -v threadtime | grep -A 10 -B 5 "ACTION_AIRPLANE_MODE_CHANGED"触发飞行模式开关后,日志会输出广播发送的完整调用链,从ActivityManagerService的日志里能直接看到发起广播的源头类和方法。
断点调试追踪调用栈
在PhoneAppBroadcastReceiver.onReceive方法加断点,当广播被接收时,查看调试器的调用栈信息。调用栈上层会清晰显示广播的发起方——如果是系统服务触发,能直接定位到对应服务类;如果是第三方应用触发,也能看到具体进程和方法。从设置入口反向追踪
飞行模式开关通常从系统设置触发,可反向追踪逻辑:- 找到设置中飞行模式开关的代码(比如packages/apps/Settings/src/com/android/settings/network/AirplaneModePreferenceController.java),查看它修改飞行模式状态的逻辑;
- 状态修改后,系统通过
Settings.System的监听机制触发广播,最终由AirplaneModeController负责发送ACTION_AIRPLANE_MODE_CHANGED广播。
内容的提问来源于stack exchange,提问作者user19791436
相关产品推荐
相关产品推荐

