我有 BroadcastReceiver 捕捉 ACTION_NEW_OUTGOING_CALL 事件。

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

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

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

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

有帮助吗?

解决方案

我通过实现“绕过前缀”解决了这个问题。在我的 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
        }
    }
}

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

其他提示

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()方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top