2012-04-24 29 views
4

使用SIP API時,如何接聽我收到的電話。我使用來自sipdemo的incomingcallreceiver類進行測試,並且在WalkieTalkieActivity類中添加了一個應答按鈕,當呼叫進入時應該啓用,但我無法弄清楚如何接聽來電。任何幫助或例子,將不勝感激。Android SIP API - 如何接取接到的電話

更具體地,這裏是從IncomingCallReceiver類示例代碼:

public class IncomingCallReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
SipAudioCall incomingCall = null; 
try { 
SipAudioCall.Listener listener = new SipAudioCall.Listener() { 
@Override 
public void onRinging(SipAudioCall call, SipProfile caller) { 
try { 
call.answerCall(30); 
} 
catch (Exception e) { 
e.printStackTrace(); 
}}}; 
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context; 
incomingCall = wtActivity.manager.takeAudioCall(intent, listener); 
incomingCall.answerCall(30); 
incomingCall.startAudio(); 
incomingCall.setSpeakerMode(true); 
if(incomingCall.isMuted()) { 
incomingCall.toggleMute(); 
} 
wtActivity.call = incomingCall; 
wtActivity.updateStatus(incomingCall); 
} 
catch (Exception e) { 
if (incomingCall != null) { 
incomingCall.close(); 
}}}} 

的WalkieTalkieActivity類使用用於接收呼叫以下: 內的onCreate

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.SipDemo.INCOMING_CALL"); 
callReceiver = new IncomingCallReceiver(); 
this.registerReceiver(callReceiver, filter); 

並且其中所述簡檔被創建

Intent i = new Intent(); 
i.setAction("android.SipDemo.INCOMING_CALL"); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA); 
manager.open(me, pi, null); 

Acc或向開發人員發送SIP guide

當SIP服務接收到新的呼叫時,它會發送一個包含應用程序提供的操作字符串的意圖。在SipDemo中,這個動作字符串是android.SipDemo.INCOMING_CALL。

SipDemo代碼摘錄顯示瞭如何根據操作字符串android.SipDemo.INCOMING_CALL使用掛起的意圖創建SipProfile對象。當SipProfile收到呼叫時,PendingIntent對象將執行廣播: (這是指創建配置文件的上述代碼) 然後,指南繼續說: 廣播將被intent過濾器攔截,它將然後觸發接收器(IncomingCallReceiver)。您可以在應用程序的清單文件中指定一個意圖過濾器,或者像在應用程序的活動的SipDemo示例應用程序的onCreate()方法中那樣在代碼中執行:

即時消息添加拾取按鈕到已啓用的WalkieTalkieActivity類onRinging,並在點擊時接聽來電。

我已成功處理所有其他常規呼叫問題,例如保持,靜音,發言,打電話和結束呼叫,但我無法弄清楚。

編輯 - 可能這個工作?:

public class IncomingCallReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
SipAudioCall incomingCall = null; 
try { 
SipAudioCall.Listener listener = new SipAudioCall.Listener() { 
@Override 
public void onRinging(SipAudioCall call, SipProfile caller) { 
try { 
call.answerCall(30); 
} 
catch (Exception e) { 
e.printStackTrace(); 
}}}; 
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context; 
wtActivity.inbound = incomingCall; 
wtActivity.updateStatus(incomingCall); 
} 
catch (Exception e) { 
if (incomingCall != null) { 
incomingCall.close(); 
}}}} 

,然後建立walkietalkieactivity類中的一個新的SipAudioCall和聽衆與它內部的onclicklistener其次是正常的呼叫處理像onRinging:

inbound.answerCall(30); 
inbound.startAudio(); 
inbound.setSpeakerMode(true); 
if(inbound.isMuted()) { 
inbound.toggleMute(); 
} 

--Thanks 丹尼爾

+0

使用'用於reciving進來的呼叫 – 2012-04-24 04:15:33

+0

answerCall'方法的ReceiveIncomingCall類包括answerCall [鏈接](http://developer.android.com/resources/samples/SipDemo/src/com/例如/ android/sip/IncomingCallReceiver.html)但我不明白它是如何調用的,或者如何從WalkieTalkieActivity類中的onclick監聽器調用它。 – Daniel 2012-04-24 04:30:40

+0

在閱讀了關於意圖,過濾器和廣播的更多信息之後,從我所知道的情況來看,來電會自動接收。我的朋友還指出,SIP演示是一個對講機或觸摸談話類型的應用程序,我正在一個SIP軟電話和對講機應用程序會自動接聽電話。我只需要弄清楚如何處理來電不同。 – Daniel 2012-04-27 12:37:58

回答

3

我能夠經過多次不同的嘗試得到這個工作。我無法處理來電呼叫活動之外的任何呼叫對象。我必須在我的主要UI類中的按鈕中調用傳入呼叫活動中的方法。引用IncomingCallReceiver.incomingCall.answercall會將狀態更改爲應答,但不會失敗並且不會實際回答,即使呼叫未建立,startaudio也會發送RTP。我試着把它放在一個監聽器裏面,但它沒有發生,所以它沒有關係。我仍然很新,所以我很抱歉,如果我的術語關閉。

謝謝, 丹尼爾

+0

你可以在這裏解釋一下,或者[email protected] – 2016-05-30 09:18:52