在 Android 上拦截来电

Posted

技术标签:

【中文标题】在 Android 上拦截来电【英文标题】:Intercepting incoming calls on Android 【发布时间】:2017-02-13 22:33:06 【问题描述】:

我想为我的 android 手机编写软件来拦截来电并播放一段简短的音频片段,指示呼叫者按“1”继续通话。这是为了打击电话推销员。

当前的 (Android 7 "Nougat") API 是否可以做到这一点?

注意事项:

很难得到明确的答案,因为在 2012 年,Android 2.3 (Gingerbread) 删除了一些与修改手机状态相关的重要 API,请参阅 here。不过,Android 7(“Nougat”)似乎支持调用拦截(参见here),所以我希望当前的 API 支持拦截调用。

我不想按照here 的建议将呼叫转发到某个服务器。

我更愿意自己编写软件,而不是安装像 Hiya 这样的应用程序。

我有一个由运营商分配的常规电话号码(没有花哨的 Google 语音或 VOIP 内容),并且我使用标准的“电话”应用程序。

我的手机没有root。

这是受到Jolly Roger Telephone Company 反电话营销机器人的启发。

我之前曾针对 iPhone here 提出过类似的问题。

谢谢。

【问题讨论】:

【参考方案1】:

具体的文档链接是 Android 7.0 - Number Blocking feature

Android 7.0 现在支持平台中的号码屏蔽,并提供框架 API 让服务提供商维护屏蔽号码列表。默认 SMS 应用程序、默认电话应用程序和运营商应用程序可以读取和写入阻止号码列表。 其他应用无法访问该列表。

最后一行强调这不是一般访问功能。

深入到BlockedNumberContract

只有系统、默认 SMS 应用程序和默认电话应用程序(请参阅 getDefaultDialerPackage())和运营商应用程序(请参阅 CarrierService)可以读取和写入被阻止的号码提供商。但是,任何应用程序都可以访问 canCurrentUserBlockNumbers(Context)。

因此,如果您是默认拨号器或默认 SMS 应用程序,您应该有权访问。如果您不是其中任何一个,那么任何应用程序所能做的就是找出该功能是否可用。

此外,我不知道将音频注入呼叫的一般方法,请参阅:Call Stream Modification on Android

【讨论】:

以上是关于在 Android 上拦截来电的主要内容,如果未能解决你的问题,请参考以下文章

Android实战_来电拦截专家

在 Android 原生来电屏幕上弹出窗口,如真正的来电者 Android 应用程序

手机卫士06_挂电话拦截短信,资产目录_来电去电_自定义吐司

尝试将来电重定向到android中的自定义UI [关闭]

Android7.0 Phone应用源码分析 phone来电流程分析

Android在后台检测来电