Android - 从循环中停止NEW_OUTGOING_CALL事件?

时间:2009-04-30 19:26:17

标签: android listener

我有一个BroadcastReceiver抓住ACTION_NEW_OUTGOING_CALL个活动。

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

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

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

如何让BroadcastReceiver知道不应再次处理此结果编号?

2 个答案:

答案 0 :(得分:6)

我通过在BroadcastReceiver中实施“绕过前缀”解决了这个问题。如果我的客户端应用程序想直接调用一个数字,它只需在调用ACTION_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
        }
    }
}

这一次解决了两个问题 - 这不仅会停止呼叫循环,还可以通过在电话簿条目中存储前缀来绕过特定号码的附加处理。

答案 1 :(得分:0)

Broadcast接收器中的onReceive()方法接收Intent作为参数。 使用Intent.getExtras()从Intent中提取Bundle。 该Bundle包含3个键值对,如下所示:

  1. android.phone.extra.ALREADY_CALLED = null
  2. android.intent.extra.PHONE_NUMBER = 98xxxxxx98
  3. android.phone.extra.ORIGINAL_URI = tel: 98xxxxxx98
  4. 98xxxxxx98 是用户拨打的号码。

    再次调用onReceive()时,此数字会变为 98xxxxxx98 * 0 * 通过检查所拨号码末尾的星号(*),可以推断出第一次或下次后续调用onReceive()方法。