Android 安卓系统-阻止新的呼出呼出事件循环?

Android 安卓系统-阻止新的呼出呼出事件循环?,android,listener,Android,Listener,我有一个BroadcastReceiver捕捉ACTION\u NEW\u outing\u CALL事件 在onReceive()方法中,我将提供的号码发送到一个新的ListActivity,用户可以从列表中选择各种新的目的地号码 当用户从列表中选择一个新号码时,我将在URI字段中使用新号码启动一个新的ACTION\u调用intent。或者,结果可能是原始数字 无论新号码是什么,都必须立即拨打,不再进行进一步处理 我如何才能让广播接收器知道这个结果数字不应该再被处理?我通过在我的广播接收器中实

我有一个
BroadcastReceiver
捕捉
ACTION\u NEW\u outing\u CALL
事件

onReceive()
方法中,我将提供的号码发送到一个新的
ListActivity
,用户可以从列表中选择各种新的目的地号码

当用户从列表中选择一个新号码时,我将在URI字段中使用新号码启动一个新的
ACTION\u调用
intent。或者,结果可能是原始数字

无论新号码是什么,都必须立即拨打,不再进行进一步处理


我如何才能让
广播接收器
知道这个结果数字不应该再被处理?

我通过在我的
广播接收器
中实现一个“旁路前缀”来解决这个问题。如果我的客户端应用程序想要直接呼叫一个号码,它只需在调用
ACTION\u call
Intent之前添加前缀即可

如果所拨号码具有(硬编码)前缀,则
BroadcastReceiver
会去除前缀并允许通话正常进行:

public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
        String number = getResultData();
        if (number.startsWith(BYPASS_PREFIX)) {
             setResultData(number.substring(BYPASS_PREFIX.length()));
        } else {
             // do additional processing
        }
    }
}
这一步解决了两个问题—不仅停止了呼叫循环,而且通过将前缀存储在电话簿条目中,我还可以绕过对特定号码的附加处理。

广播接收器中的onReceive()方法将意图作为参数接收。 使用Intent.getExtras()从Intent中提取捆绑包。 此捆绑包包含3个键值对,如下所示:

  • android.phone.extra.ready_CALLED=null
  • android.intent.extra.PHONE_NUMBER=98xxxxxx98
  • android.phone.extra.ORIGINAL_URI=tel:98xxxxxx98
  • 98xxxxxx98是用户拨打的号码

    再次调用onReceive()时,此数字将更改为98xxxxxx98*0*
    通过检查拨号号码末尾的星号(*),可以推断onReceive()方法是第一次调用还是下一次调用。

    嗨,Alnitak,我在HTC Hero上遇到了一个主要问题,我使用setResultData(null)来阻止呼叫,但它似乎无法正确阻止呼叫。它可以阻止它,但它会在“已使用的应用程序”屏幕中显示一个拨号图标(按住home键),当你点击它时,它会再次尝试呼叫,然后消失,你遇到过类似的情况吗?在香草安卓系统中运行良好,但在HTC英雄上有重大问题的人没有英雄。它们的特殊shell也可能以比应用程序更高的优先级拦截出站调用尝试。尝试更改广播接收器的优先级。但通过此操作,我无法阻止特定号码的通话