es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Android – cómo fusionar llamadas (GSM/SIM) en una conferencia (InCallService)

Estoy intentando fusionar dos llamadas GSM en una conferencia de forma programática.

En la clase “Call” hay un método “conference()” pero no estoy seguro de cómo funciona correctamente. He probado de varias formas pero nada funciona correctamente.

Tengo la clase “CallService” (implementa “InCallService”)

Y en el método “override fun onCallAdded(call: Call)”

He intentado algo como esto:

activeCall.hold()

secondCall.answer(VideoProfile.STATE_AUDIO_ONLY)

secondCall.conference(activeCall)
secondCall.mergeConference()

Pero no creará una llamada de conferencia (la primera llamada se establece como ocupada). He probado varios cambios en ese código pero no funciona.

También encontré esto https://stackoverflow.com/questions/44074101/how-to-merge-call-programmatically-in-android-conference-call y esto https://stackoverflow.com/questions/20951638/how-to-merge-call-programmatically-while-other-call-is-running-conference-call?noredirect=1&lq=1 pero no ayudó (y es un poco antiguo).

Gracias por la ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para fusionar dos llamadas GSM en una conferencia de forma programática en Android, puedes utilizar el método Call.conference(). Sin embargo, hay algunas cosas a tener en cuenta al utilizar este método.

    En primer lugar, necesitas tener la capacidad CALL_CAPABILITY_MERGE_CONFERENCE en ambas llamadas. Puedes verificar esto llamando al método Call.getDetails().getCallCapabilities(). Si devuelve CAPABILITY_MERGE_CONFERENCE, significa que la llamada se puede fusionar.

    En segundo lugar, necesitas poner la primera llamada en espera antes de fusionar la segunda llamada. Puedes hacer esto llamando al método Call.hold().

    Por último, necesitas llamar al método Call.conference() en la segunda llamada y pasar la primera llamada como parámetro. Esto iniciará la llamada de conferencia.

    Aquí tienes un ejemplo de fragmento de código:

    override fun onCallAdded(call: Call) {
        if (calls.size == 2) {
            val call1 = calls[0]
            val call2 = calls[1]
    
            if (call1.details.callCapabilities and Call.Details.CAPABILITY_MERGE_CONFERENCE == Call.Details.CAPABILITY_MERGE_CONFERENCE
                && call2.details.callCapabilities and Call.Details.CAPABILITY_MERGE_CONFERENCE == Call.Details.CAPABILITY_MERGE_CONFERENCE) {
                call1.hold()
    
                val conferenceableCalls = listOf(call1) as java.util.List<call>
                call2.conference(conferenceableCalls)
    
                call2.setConferenceableConnections(conferenceableCalls)
    
                call2.setConferenceableConnections(null)
    
                call1.unhold()
            }
        }
    }
    

    Aquí, verificamos si ambas llamadas tienen la capacidad CAPABILITY_MERGE_CONFERENCE. Si lo tienen, ponemos la primera llamada en espera, iniciamos la llamada de conferencia utilizando el método Call.conference() de la segunda llamada y luego reanudamos la primera llamada.

    Ten en cuenta que esto es solo un ejemplo y es posible que necesites modificarlo para que se ajuste a tu caso de uso específico.

Comments are closed.