根据Android开发者博客上的这篇博文,应该可以更改拨出电话号码: http://android-developers.blogspot.com/2011/01/processing-ordered-broadcasts.html
问题是它对我不起作用,我的代码:
String action = intent.getAction();
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
// Try to read the phone number from previous receivers.
String phonenumber = getResultData();
if (phonenumber == null) {
// We could not find any previous data. Use the original
// phone
// number in this case.
phonenumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
}
String reformatedNumber = reformatNumber(phonenumber);
setResultData(reformatedNumber);
}
即使我重新格式化了号码,我拨打的电话号码也是正在呼叫的电话号码。
有什么见解?
我的清单中有这些权限:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
奇怪的是,当我打电话给我没有存储在电话簿中的号码时,我有一个服务试图找出我正在呼叫的人,我必须在对话框上按“呼叫”按钮才能完成电话。然后我的代码可以运行,但是当我通过电话簿呼叫某人或者如果我禁用查找服务时,它就不起作用。
答案 0 :(得分:2)
你在博文中提到:
我们实际观察过手机 优先0接收器 NEW_OUTGOING_CALL意图安装完毕 的盒子(这将是最后一个 这是所有其他人所称的那个) 完全忽略了以前的结果 这些数据实际上意味着它们 禁用任何有用的处理 ACTION_NEW_OUTGOING_CALL(除了 取消呼叫,这仍然是 工作)。唯一的解决方法是 也优先运行您的接收器 0,由于特殊性而起作用 同时运行2个接收器 优先,但通过这样做,你打破 为数不多的明确规则之一 处理拨出电话:
“为了保持一致性,任何接收者都是 目的是禁止打电话 应该优先级为0,以确保 它会看到最后的电话号码 被拨打。任何接收者的目的 是重写电话号码 叫做应该有积极的 优先。负面优先事项是 为此系统保留 广播;使用它们可能会导致 问题。”
您是否有可能遇到这样的事实:在手机上您的代码被提供商安装的优先级0的意图忽略了?您也可以通过将优先级设置为0来测试它。
答案 1 :(得分:1)
这可能是订单问题:系统在您的代码之前接收有序广播,因此更改不起作用。
尝试更改清单中<intent-filter>
元素的android:priority
属性,看看它是否有所不同。