【问题标题】:Intercept incoming call in a rooted Android (Jelly Bean)在有根的Android(果冻豆)中拦截来电
【发布时间】:2014-12-21 03:24:10
【问题描述】:

我希望拦截呼叫以阻止来自未存储在“通讯录”中的号码的所有呼叫并避免默认电话应用程序设置的各种通知 - 在状态栏中,在其图标 (未接电话数)等。

所有设备都是三星 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_LOG、READ_CONTACTS、WRITE_CONTACTS),这很有效。当我触摸电话应用程序图标或状态栏通知时,通话记录显示为空。

【问题讨论】:

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


    【解决方案1】:

    我用这段代码解决了这个问题:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      相关资源
      最近更新 更多