Recibir llamada
Antes de realizar una llamada, vamos a añadir a la aplicación la posibilidad de recibir llamadas. Añadir onGoingCallID y callInviteID propiedades situadas en la parte superior de la MainActivity clase:
private var onGoingCallID: CallId? = null
private var callInviteID: CallId? = null
Para escuchar las llamadas entrantes añada incoming call listener al final de onCreate método inside MainActivity clase:
client.setCallInviteListener { callId, from, channelType ->
callInviteID = callId
runOnUiThread {
hideUI()
answerCallButton.visibility = View.VISIBLE
rejectCallButton.visibility = View.VISIBLE
}
}
Ahora la aplicación esperará a que se produzca el evento de llamada entrante. El código anterior muestra los botones para contestar y rechazar la llamada cuando se recibe el evento de llamada entrante. Fíjate en que estás almacenando callInviteID referencia para interactuar más adelante con la llamada.
Antes de que puedas realizar acciones usando UI también necesitas añadir listeners a los botones. Añade este código en el onCreate dentro MainActivity clase:
answerCallButton.setOnClickListener { answerCall() }
rejectCallButton.setOnClickListener { rejectCall() }
endCallButton.setOnClickListener { endCall() }
Para responder a la llamada, añada answerCall método inside MainActivity clase:
@SuppressLint("MissingPermission")
private fun answerCall() {
callInviteID?.let {
client.answer(it) {
err ->
when {
err != null -> {
connectionStatusTextView.text = err.localizedMessage
}
else -> {
onGoingCallID = it
hideUI()
endCallButton.visibility = View.VISIBLE
}
}
}
}
}
Tras responder a la llamada, el end call Aparecerá el botón.
NOTA: En SuppressLint se utiliza por simplicidad. En la aplicación de producción debes asegurarte de que se conceden los permisos antes de responder a la llamada.
Para rechazar la llamada añada rejectCall método inside MainActivity clase:
private fun rejectCall() {
callInviteID?.let {
client.reject(it) { err ->
when {
err != null -> {
connectionStatusTextView.text = err.localizedMessage
}
else -> {
hideUI()
startCallButton.visibility = View.VISIBLE
waitingForIncomingCallTextView.visibility = View.VISIBLE
}
}
}
onGoingCallID = null
}
}
Para finalizar la llamada añada endCall método inside MainActivity clase:
private fun endCall() {
onGoingCallID?.let {
client.hangup(it) {
err ->
when {
err != null -> {
connectionStatusTextView.text = err.localizedMessage
}
else -> {
hideUI()
startCallButton.visibility = View.VISIBLE
waitingForIncomingCallTextView.visibility = View.VISIBLE
}
}
}
}
onGoingCallID = null
}
Ten en cuenta que, tras rechazar o finalizar correctamente la llamada, debes establecer onGoingCall restablecer el valor de la propiedad a «null».
Realizar una llamada de voz de aplicación a aplicación
Realiza una llamada de voz desde una aplicación de Android a la misma aplicación de Android instalada en otro dispositivo utilizando el Client SDK de Android.