Не переводить мой вызов CsipSimple Voip в режим удержания при выборе вызова третьей стороной - PullRequest
1 голос
/ 08 июня 2019

Я разрабатываю приложение Voip с использованием cSipSimple. Теперь я хочу показать сигнал «занято» при поступлении вызова стороннего приложения (WhatsApp, Instagram и т. д.). Теперь сценарий таков, что я нахожусь на моем VoIP-звонке, и кто-то один звонок на мой номер GSM, и я отвечаю на телефон мой VoIP вызов автоматически переходит в состояние «Удержание», но следующий сценарий заключается в том, что, когда вызывает приложение стороннее приложение, и я в это время принимаю трубку, мой VoIP-вызов продолжается, а сторонний вызов не работает. Теперь я хочу, когда стороннее приложение звонит, и я отвечаю на вызов. Мой VoIP-вызов переводится в режим удержания, и я подключаюсь к стороннему вызову. Есть ли какой-либо метод или приемник для обнаружения поступающего стороннего вызова ??

я пробую это Как я могу обнаружить звонки по скайпу / телеграмме / WhatsApp, когда мое приложение обмена сообщениями выполняет вызов или хочет сделать звонок? , но оно не работает.

Я использую этот код для Обнаружения GSM-вызова и перевожу мой VoIP-вызов.

 public void onGSMStateChanged(int state, String incomingNumber) throws SameThreadException {
        // Avoid ringing if new GSM state is not idle
        if (state != TelephonyManager.CALL_STATE_IDLE && mediaManager != null) {
            mediaManager.stopRingAndUnfocus();
        }

        // If new call state is not idle
        if (state != TelephonyManager.CALL_STATE_IDLE && userAgentReceiver != null) {
            SipCallSession currentActiveCall = userAgentReceiver.getActiveCallOngoing();
            // If we have a sip call on our side
            if (currentActiveCall != null) {
                AudioManager am = (AudioManager) service.getSystemService(Context.AUDIO_SERVICE);
                if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                    // GSM is now off hook => hold current sip call
                    hasBeenHoldByGSM = currentActiveCall.getCallId();
                    callHold(hasBeenHoldByGSM);
                    pjsua.set_no_snd_dev();
                    am.setMode(AudioManager.MODE_IN_CALL);
                } else {
                    // We have a ringing incoming call.
                    // Avoid ringing
                    hasBeenChangedRingerMode = am.getRingerMode();
                    am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    // And try to notify with tone
                    if (mediaManager != null) {
                        mediaManager.playInCallTone(MediaManager.TONE_CALL_WAITING);
                    }
                }
            }
        } else {
            // GSM is now back to an IDLE state, resume previously stopped SIP
            // calls
            if (hasBeenHoldByGSM != null && isCreated()) {
                pjsua.set_snd_dev(0, 0);
                callReinvite(hasBeenHoldByGSM, true);
                hasBeenHoldByGSM = null;
            }

            // GSM is now back to an IDLE state, reset ringerMode if was
            // changed.
            if (hasBeenChangedRingerMode != null) {
                AudioManager am = (AudioManager) service.getSystemService(Context.AUDIO_SERVICE);
                am.setRingerMode(hasBeenChangedRingerMode);
                hasBeenChangedRingerMode = null;
            }
        }
    }

Заранее спасибо, и помощь будет признателен!

...