在一个有根的Android(Jelly Bean)中拦截来电

时间:2014-10-25 12:23:07

标签: java android linux android-4.2-jelly-bean gsm

我希望拦截来电,以阻止来自未存储在通讯录中的号码的所有来电和,以避免默认情况下设置的各种通知电话应用 - 在状态栏中,图标(未接来电数量等)

所有设备都是三星Galaxy Core Duos,因此我将阻止模式作为阻止来自未存储在“联系人”中的号码的所有呼叫的不良方式。 我的主要问题是找到一种方法来禁用(避免)上述通知。我知道我可以清空我的通话记录,而我正在这样做,但通知会保留在状态栏和图标上。话虽如此,但我相信两者都可以解决。

有没有办法为运行Jelly Bean的root设备执行此操作?

由于在这种情况下没有正确使用abortBroadcast()的方式,因为android.intent.action.PHONE_STATE未通过有序广播接收(没有系统sendOrderedBroadcast()来电,就像收到的短信一样,但简单的旧sendBroadcast()代替),所有接收者必须同时接收这个意图"同时"。

为了使我的目标可能无法实现,据我所知,事情甚至在广播之前就开始发生了。此外,没有任何法律上可接受的"在致电sendBroadcast()之前发生,正如 this blog post 中详细描述的那样。顺便说一句,这篇文章是在2009年提交的。从那时起,有关这个问题的任何事情发生了变化吗?

有可能使用shell解决这个问题吗?如果是,怎么样?

清空呼叫记录的代码如下:

context.getContentResolver().delete(android.provider.CallLog.Calls.CONTENT_URI, null, null);

我需要权限(例如:WRITE_CALL_LOGREAD_CONTACTSWRITE_CONTACTS)这是有效的。当我触摸电话应用图标或状态栏通知时,通话记录显示为空。

1 个答案:

答案 0 :(得分:0)

我用这段代码解决了它:

Runtime runtime = Runtime.getRuntime();
try
{
    runtime.exec("service call phone 5 \n");
}
catch (Exception e)
{
    e.printStackTrace();
}

它将通话标记为已结束,而不是将其标记为未通过,并且结束通话不会显示任何类型的通知。

如果5不起作用,请尝试其他数字,如4,6,8等。