Android - 如何使用telephonyService立即结束呼叫?

时间:2013-01-22 14:31:53

标签: android android-intent broadcastreceiver telephonymanager

在我的应用程序中,有一项功能可以在拨打特定号码时结束拨出电话(并启动其他活动)(例如*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的工作方式与正常手机相同吗?

2 个答案:

答案 0 :(得分:1)

得到答案......

要结束传出立即致电 ,我们甚至不需要从endCall()致电ITelephony,相反,我们可以只需使用 setResultData(null);

与手动结束通话或使用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
            }
        }
    }
}

答案 1 :(得分:0)

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

  
    

这是答案Blocking/Ending incoming call

  

在ACTION_NEW_OUTGOING_CALL之前我们还有其他意图吗?

  
    

  

Q2:在规格较低(CPU速度慢,内存较少)的手机上,BroadcastReceiver的工作方式与正常手机相同吗?