如何在Android中阻止通话


73

我想阻止来自几个号码的呼叫,为此,我想编写自己的应用程序。那么我应该使用哪些API?

基本上,我想在打来电话时得到通知,如果要阻止,我想比较号码,我想切断电话或将其静音,或者尽可能将其静音并记录下来。


我认为可以阻止来电。:试试这个 stackoverflow.com/questions/7121508/...
维尼特舒克拉


请取消接受错误的答案,这可能会使某些人误以为所接受的答案不是正确的答案。
ayanami

Answers:


65

我的天啊!!!是的,我们可以做到!经过24小时的认真调查和发现,我打算自杀。但是我发现了“新鲜”的解决方案!

// "cheat" with Java reflection to gain access to TelephonyManager's
// ITelephony getter
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony)m.invoke(tm);

所有想开发其呼叫控制软件的人都访问了这个起点

有一个项目。并且有重要的评论(和功劳)

简要地:复制辅助文件,添加清单的权限,复制粘贴源以进行电话管理)))

为您提供更多信息。只有植根后才能发送AT命令。比您可以杀死系统进程并发送命令之外,但您需要重新启动手机才能接收和发送呼叫=)))

我非常高兴=)现在我的Shake2MuteCall将得到更新!


6
即使可行,对我来说似乎有点冒险。内部API更改时,您的应用程序可能会被破坏,恕不另行通知。
Guido 2010年

4
那是因为Google Code已被关闭。正是为什么人们在这里警告链接腐烂。发表与您的帖子相关的任何内容。您可能会认为Google是可以永远保持下去的来源之一,但是正如您所看到的,甚至它们的链接也被破坏了。
o_O 2012年

有没有办法将呼叫发送到语音邮件?
powder366 2014年

在方法m处获取NoSuchMethodException = c.getDeclaredMethod(“ getITelephony”); ..如何避免这种情况???
uniruddh 2014年

最后一行中的ITelephony是什么?请回复我无法导入
Shirish Herwade

5

这是可能的,您不需要自己编写代码。

如果incomingNumber等于空字符串,只需将铃声音量设置为零,将振动设置为无。而已 ...

刚刚使用Android Market的Nostalk应用程序为您完成了此操作。试一试...


7
问题不在于任何此类应用程序,而是如何以编程方式阻止传入的号码+在您的解决方案中,我将如何知道号码是多少?
阿努拉格Uniyal 09年

1
这并不难...如果您查看SDK参考中的内容,您会发现必须在应用程序中注册一个onCallStateChangeListener()。一旦完成,它将为您提供callState,它可以是IDLE,RINGING或OFF_HOOK之一。除此之外,侦听器还将为您提供incomingingNumber ...这就是您执行操作的地方。通常,SDK不会真正给您提供挂断电话的选项,这些功能不是公共可用的,它们以无法访问它们的方式被隐藏。

4

在android-N中,此功能包含在其中。检查android N的号码拦截更新

Android N现在在平台中支持数字阻止功能,并提供了框架API,以使服务提供商可以维护阻止号码列表。默认的SMS应用程序,默认的电话应用程序和提供者应用程序可以读取和写入阻止号码列表。该列表无法被其他应用访问。

的优点是:

  1. 通话中被阻止的号码也被短信屏蔽
  2. 通过备份和还原功能,被阻止的号码可以在重置和设备之间持续存在
  3. 多个应用可以使用相同的阻止号码列表

有关更多信息,请参见 android.provider.BlockedNumberContract

更新现有项目。

要针对Android N平台编译应用,您需要使用Java 8开发人员工具包(JDK 8),并且要在Android Studio 2.1中使用某些工具,您需要安装Java 8运行时环境(JRE 8)

打开模块的build.gradle文件,并按如下所示更新值:

android {
  compileSdkVersion 'android-N'
  buildToolsVersion 24.0.0 rc1
  ...

  defaultConfig {
     minSdkVersion 'N'
     targetSdkVersion 'N'
     ...
  }
  ...
}

这篇文章的链接无效!他们都得到404找不到!
hadilq


3

您可以将联系人中的特定号码重新定向到语音邮件。已经支持了。

否则,我认为“联系人”的文档将是一个不错的起点。


0

您可以通过收听电话事件来做到这一点。您可以通过将BroadcastReceiver设置为PHONE_STATE和NEW_OUTGOING_CALL来实现。您在这里找到电话号码。

然后,当您决定结束通话时,这会有些棘手,因为只有从Android P上,它才能保证正常工作。在这里检查。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.