Android如何伪造来电?终端广播命令无响应问题求助
Android伪造原生来电的解决方法
Root设备方案(可触发系统原生来电界面)
方法1:调用Telephony Service命令
系统的phone服务提供了直接触发来电的底层接口,通过service call命令调用即可。不同Android版本的方法编号有差异,以下是常见版本的可用命令:
- Android 8.0-10.0:
service call phone 5 s16 "1111111111" - Android 11+:
service call phone 7 s16 "1111111111"
注:如果命令无效,可查找对应Android版本的
ITelephony.aidl文件,找到showCallScreenWithDialer方法的序号,替换命令中的数字即可。
方法2:发送系统级定向广播
普通广播无法被系统电话应用接收,必须指定系统用户(--user 0)和目标电话应用包名,命令格式如下:
am broadcast -a android.intent.action.PHONE_STATE --es state "RINGING" --es incoming_number "1111111111" --user 0 -n *你的设备电话应用包名*/*广播接收器类名*
- 常见设备电话应用包名参考:
- 原生Android:
com.android.phone - 小米/Redmi:
com.android.incallui - 华为:
com.huawei.phone
- 原生Android:
- 若不确定包名,可通过以下命令查看默认电话应用:
dumpsys telecom | grep "Default dialer"
非Root设备方案(无法触发系统原生来电)
Android系统的权限机制限制了普通应用调用系统电话服务,只能通过自定义应用实现模拟来电:
- 开发一个Android应用,注册自定义广播接收器
- 编写全屏Activity模拟来电界面(显示号码、接听/挂断按钮)
- 通过终端发送自定义广播触发模拟界面:
am broadcast -a com.your.package.CUSTOM_INCOMING_CALL --es number "1111111111"
原命令无效的原因
android.intent.action.PHONE_STATE是系统专属广播,普通用户发送的该广播会被系统电话应用因安全策略忽略;同时原命令未指定系统用户和目标应用,导致广播无法被有效接收。
内容的提问来源于stack exchange,提问作者Rachit Dhakal
相关产品推荐
相关产品推荐

