更改拨出电话的号码,添加前缀

时间:2011-02-19 17:27:19

标签: java android android-intent broadcastreceiver

根据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" />

奇怪的是,当我打电话给我没有存储在电话簿中的号码时,我有一个服务试图找出我正在呼叫的人,我必须在对话框上按“呼叫”按钮才能完成电话。然后我的代码可以运行,但是当我通过电话簿呼叫某人或者如果我禁用查找服务时,它就不起作用。

2 个答案:

答案 0 :(得分:2)

你在博文中提到:

  

我们实际观察过手机   优先0接收器   NEW_OUTGOING_CALL意图安装完毕   的盒子(这将是最后一个   这是所有其他人所称的那个)   完全忽略了以前的结果   这些数据实际上意味着它们   禁用任何有用的处理   ACTION_NEW_OUTGOING_CALL(除了   取消呼叫,这仍然是   工作)。唯一的解决方法是   也优先运行您的接收器   0,由于特殊性而起作用   同时运行2个接收器   优先,但通过这样做,你打破   为数不多的明确规则之一   处理拨出电话:

     

“为了保持一致性,任何接收者都是   目的是禁止打电话   应该优先级为0,以确保   它会看到最后的电话号码   被拨打。任何接收者的目的   是重写电话号码   叫做应该有积极的   优先。负面优先事项是   为此系统保留   广播;使用它们可能会导致   问题。”

您是否有可能遇到这样的事实:在手机上您的代码被提供商安装的优先级0的意图忽略了?您也可以通过将优先级设置为0来测试它。

答案 1 :(得分:1)

这可能是订单问题:系统在您的代码之前接收有序广播,因此更改不起作用。

尝试更改清单中<intent-filter>元素的android:priority属性,看看它是否有所不同。