这个问题似乎很简单——提供你自己的应用程序来拦截拨号命令,然后自己拨号(想象一个 VoIP 应用程序,如果连接,则发出 VoIP 呼叫,如果未连接,则使用手机的蜂窝功能拨打电话)。
这个线程提供了你需要的所有信息——除了有一点小故障:
并非每个应用程序似乎都使用相同的意图。我认为 Intent.ACTION_DIAL 必须是推荐的标准选项,果然,大多数应用程序都这样做。然后是 Intent.ACTION_CALL_BUTTON,这似乎很奇怪(我的 S3 告诉我它首先没有应用程序处理此操作),最后是 Intent.ACTION_CALL_PRIVILEGED。
经过反复试验,我发现“本机”应用程序(我称之为本机通话记录和联系人应用程序本机)似乎正在使用 Intent.ACTION_CALL_PRIVILEGED,而其余的则使用 INTENT_ACTION_CALL。问题就在这里……如果你注册了这两个动作,那么你肯定可以捕捉到每一个拨号命令,但是你会用它做什么呢?您不能使用这些操作中的任何一个来触发意图,因为这只会让您陷入无限循环,没有更低级别的操作,并且 TelephonyManager 明显错过了 makeCall 方法。既然不能动态注册和注销intent过滤器,有没有办法让这只狗追尾巴呢?