[英]Incomings Call with Android Sip stack in Embarcadero C++ builder
我正在嘗試使用C ++生成器在Embarcadero的SIP應用程序上接聽電話,但無法獲取。 我的情況如下:
我已經制作了一個Asterisk服務器,創建了多個帳戶來進行測試,並且下載了適用於Windows和Android的Zoiper應用程序。 在我設計的應用程序中,我可以對在Zoiper中注冊的那些帳戶進行調用,盡管不是通過事件進行的,但似乎監聽器沒有監聽,並且已經通過調用中的狀態更改來實現了。
Java代碼是這樣的:
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public void onCallEstablished(SipAudioCall call) {
call.startAudio();
call.setSpeakerMode(true);
call.toggleMute();
Log.d("on call established", "on call established");
}
@Override
public void onCallEnded(SipAudioCall call) {
finish();
}
};
在Embarcadero C ++ Builder中,我認為它將像這樣(它不起作用)進行編譯和執行,但該事件從未發生:
//The Manifest counts as the necessary permissions for Android, Internet and Sip.
_di_JSipAudioCall_Listener audioCall_Listener;
_di_JSipSession_Listener sessionListener;
_di_JSipSession session;
_di_JSipManager;
_di_JSipAudioCall audioCall;
_di_JSipProfile profile;
_di_JString uri;
_di_JString uri_llamada;
void onCallEstablished2(SipAudioCall call);
//The process of profile creation and instantiation of SipManager are programmed
//and compiled and do not give any problem.
audioCall_listener = TJSipAudioCall_Listener::JavaClass->init();
audioCall_listener->onCallEstablished = onCallEstablished2;
sessionListener = TJSipSession_Listener::JavaClass->init();
session = manager->createSipSession(profile,sessionListener);
audioCall = manager->makeAudioCall(uri,uri_llamada,audioCall_listener,15);
void onCallEstablished2(SipAudioCall call)
{
audioCall->startAudio();
audioCall->setSpeakerMode(true);
}
在Embarcadero C ++生成器中生成的代碼可以正常工作:
//The Manifest counts as the necessary permissions for Android, Internet and Sip.
_di_JSipAudioCall_Listener audioCall_Listener;
_di_JSipSession_Listener sessionListener;
_di_JSipSession session;
_di_JSipManager;
_di_JSipAudioCall audioCall;
_di_JSipProfile profile;
_di_JString uri;
_di_JString uri_llamada;
//The process of profile creation and instantiation of SipManager are programmed
//and compiled and do not give any problem.
audioCall_listener = TJSipAudioCall_Listener::JavaClass->init();
audioCall_listener->onCallEstablished = onCallEstablished2;
sessionListener = TJSipSession_Listener::JavaClass->init();
session = manager->createSipSession(profile,sessionListener);
audioCall = manager->makeAudioCall(uri,uri_llamada,audioCall_listener,15);
Timer1->Enabled = true;
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
if (audioCall->getState() == 8)
{
audioCall->startAudio();
audioCall->setSpeakerMode(true);
}
if(audioCall->getState() == 0)
{
audioCall->endCall();
}
}
至於用於接收呼叫的Java代碼,我在這里找到了示例, 在傳入呼叫上沒有響鈴事件,在這里找到了使用帶有Broadcast Receiver的Service進行Android Sip傳入呼叫的示例,但是它們都是基於事件的,這似乎不適用於我。 我還嘗試做IncomingReceiver類,它是從BroadcastReceiver擴展而來的,在Embarcadero上給我帶來了問題。
使用C ++構建器在Embarcadero中制作的類(不編譯):
class IncomingReceiver: public JBroadcastReceiver{
public:
__fastcall IncomingReceiver();
_di_JSipAudioCall incomingCall;
void onReceive(_di_JContext contexto, _di_JIntent intento);
void accept();
void showIncomingCallGui(_di_JIntent intento, _di_JContext contexto);
};
因此,我的問題是:
為什么事件對我不起作用?
我可以接聽沒有事件的電話嗎?
如果是這樣,沒有事件會是什么樣?
如果無法獲得IncomingReceiver類,該怎么辦?
我找到了一個頁面(西班牙語): http : //lfgonzalez.visiblogs.com/cbuilder-10-2-tokyo-jni-broadcastreceiver-android/ ,其中解釋了在Embarcadero C ++ Builder中使用BroadcastReceiver的方法。 也許有了這些信息,您就可以使事件正常進行以接聽電話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.