0

在我的应用程序中,有一个功能可以在拨打某个号码(例如)时结束拨出电话(并开始其他活动*123*

它目前正在工作,但需要 200 毫秒的延迟。没有延迟,就无法接收意图。

延迟会导致多次屏幕闪烁的后果:

my activity shows-> switch to call-> end call->switch back to my activity

public class OutgoingCallListener extends BroadcastReceiver {
    // ...
    public void onReceive(final Context context, Intent intent) {
        // ...
        if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            // ...
            if(number.equals("*123*")) {
                // ...
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    public void run() {
                        telephonyService.endCall();
                    }
                }, 200);
            }
        }
    }
}

我见过其他具有此特殊号码拨号功能的应用程序,呼叫立即结束,没有结束呼叫蜂鸣声,并切换到应用程序活动而没有闪烁。

Q1:有人知道如何立即结束通话吗?我们之前可以捕捉到另一个意图ACTION_NEW_OUTGOING_CALL吗?

Q2:在低配置的手机上(慢 CPU,内存少),是否会BroadcastReceiver和像样的手机一样工作?

4

2 回答 2

1

得到了答案...

要立即结束拨出电话,我们甚至不需要调用from ,相反,我们可以简单地使用setResultData(null);endCall()ITelephony

它与手动结束通话或使用 endCall 不同,具有setResultData(null)

  • 没有通知图标或消息
  • 没有来电画面
  • 没有通话时间吐司
  • 没有通话记录
  • 没有结束呼叫蜂鸣声

就像什么都没发生(如果……没有任何其他额外活动)。

public class OutgoingCallListener extends BroadcastReceiver {
    // ...
    public void onReceive(final Context context, Intent intent) {
        // ...
        if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            // ...
            if(number.equals("*123*")) {
                setResultData(null);
                // start other activities
            }
        }
    }
}
于 2013-01-22T15:53:56.130 回答
0

Q1: 有人知道如何立即结束通话吗?

这是答案阻止/结束来电

在 ACTION_NEW_OUTGOING_CALL 之前我们可以捕捉到另一个意图吗?

Q2:在低配置的手机(慢 CPU,内存少)上,BroadcastReceiver 的工作方式是否与在体面的手机上相同?

是的

于 2013-01-22T14:36:36.957 回答