我有一个BroadcastReceiver
抓住ACTION_NEW_OUTGOING_CALL
个活动。
在onReceive()
方法中,我将提供的号码发送到新的ListActivity
,用户可以从列表中选择各种新的目的地号码。
当用户从列表中选择一个新号码时,我就会在URI字段中使用新号码开始一个新的ACTION_CALL
意图。或者,结果可能是原始数字。
无论新号码是什么,都必须立即拨打,不再进行任何处理。
如何让BroadcastReceiver
知道不应再次处理此结果编号?
答案 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个键值对,如下所示:
98xxxxxx98 是用户拨打的号码。
再次调用onReceive()时,此数字会变为 98xxxxxx98 * 或 0 * 通过检查所拨号码末尾的星号(*),可以推断出第一次或下次后续调用onReceive()方法。