0

在我的應用程序,有一個特點,結束呼出(並開始其他活動),同時撥打某個號碼(例如*123*Android - 如何立即結束與telephonyService的呼叫?

它目前的工作,但需要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的工作方式與在體面的手機上一樣嗎?

回答

1

得到的答案...

要結束傳出呼叫立即,我們甚至不需要調用endCall()ITelephony,相反,我們可以簡單地使用setResultData(NULL);

它不同於手動結束通話或使用結束呼叫,與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 
      } 
     } 
    } 
} 
0

問題1:有人知道如何結束通話嗎?

這裏就是答案Blocking/Ending incoming call

有沒有我們可以ACTION_NEW_OUTGOING_CALL之前趕上另一個意圖是什麼?

沒有

Q2:在手機用低規格(慢CPU,內存少),將廣播接收器的工作方式相同作爲一個體面的手機上?