2009-04-30 106 views
3

我有一个BroadcastReceiver捕获ACTION_NEW_OUTGOING_CALL事件。Android - 从循环中停止NEW_OUTGOING_CALL事件?

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

当用户从列表中选择一个新号码时,我将使用URI字段中的新号码开始一个新的ACTION_CALL意图。或者,结果可能是原始数字。

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

我该如何让BroadcastReceiver知道这个结果数字不应该再次被处理?

回答

5

我通过在我的BroadcastReceiver中实现“Bypass Prefix”来解决这个问题。如果我的客户端应用程序想要直接调用一个数字,它只是在调用ACTION_CALL Intent之前预先设置前缀。

如果拨打的号码的(硬编码)前缀,则BroadcastReceiver去掉前缀和允许呼叫正常进行:

这解决了一个去两个问题 - 这不仅停止呼叫循环,它也给我一种方式,通过在电话簿条目中存储前缀来绕过特定号码的附加处理。

+0

嗨Alnitak,我在HTC Hero遇到过这个问题,我使用setResultData(null)来阻止通话,但它似乎没有正确地阻止通话。它阻止它确定,但它在使用的应用程序屏幕(按住home键)中有一个拨号图标,当你点击它时,它似乎尝试再次调用,然后消失,哟遇到类似的东西?在香草Android上工作正常,但在HTC Hero上有重大问题 – 2010-02-05 15:17:56

0

Broadcast receiver中的onReceive()方法接收一个Intent作为参数。 使用Intent.getExtras()从Intent中提取Bundle。 此包包括如下3键 - 值对:

  1. android.phone.extra.ALREADY_CALLED = NULL
  2. android.intent.extra.PHONE_NUMBER = 98xxxxxx98
  3. android.phone.extra。 ORIGINAL_URI =电话:98xxxxxx98

98xxxxxx98是由用户所拨的号码。

当的onReceive()被再次调用,这个数量变为98xxxxxx98 *0 * 通过检查在所拨打的号码的端部的星号(*),它可以当的onReceive推断()方法在第一次或下一次后续时间被调用。