Incomings Call с Android Sip стек в Embarcadero C ++ Builder

Я пытаюсь принимать звонки на моем SIP-приложении на Embarcadero с помощью C ++ builder
и я не могу получить это. Моя ситуация выглядит следующим образом:

Я сделал сервер Asterisk, я создал несколько учетных записей, чтобы иметь возможность
тесты, и я скачал приложение Zoiper для Windows и Android.
В моем разработанном приложении я могу совершать звонки на те аккаунты, которые зарегистрированы
в 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 ++ 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;

//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 для приема вызовов, я нашел примеры здесь
Нет звонка на входящие звонки
и здесь
Android Sip входящий звонок с использованием сервиса с Broadcast Receiver,
но все они основаны на событиях, что, похоже, не работает для меня.
Я также попытался сделать класс IncomingReceiver, который расширяется от
BroadcastReceiver и Embarcadero доставляют мне проблемы.

Класс, созданный в Embarcadero с помощью C ++ builder (не компилируется):

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?

0

Решение

Я нашел страницу (на испанском): http://lfgonzalez.visiblogs.com/cbuilder-10-2-tokyo-jni-broadcastreceiver-android/ в котором объясняется использование BroadcastReceiver в Embarcadero C ++ Builder. Может быть, с этой информацией вы можете получить события, работающие для того, чтобы принимать звонки.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]