Receber chamada
Antes de fazer uma chamada, vamos adicionar ao aplicativo a funcionalidade de receber chamadas. Adicione onGoingCallID e callInviteID propriedades na parte superior da MainActivity classe:
private var onGoingCallID: CallId? = null
private var callInviteID: CallId? = null
Para monitorar chamadas recebidas, adicione um ouvinte de chamadas recebidas no final do arquivo onCreate método interno MainActivity classe:
client.setCallInviteListener { callId, from, channelType ->
callInviteID = callId
runOnUiThread {
hideUI()
answerCallButton.visibility = View.VISIBLE
rejectCallButton.visibility = View.VISIBLE
}
}
O aplicativo agora ficará atento ao evento de chamada recebida. O código acima exibe os botões para atender e rejeitar a chamada quando o evento de chamada recebida é detectado. Observe que você está armazenando callInviteID referência para interagir posteriormente com a chamada.
Antes de poder realizar ações por meio da interface do usuário, você também precisa adicionar ouvintes aos botões. Adicione este código no final do arquivo onCreate dentro MainActivity classe:
answerCallButton.setOnClickListener { answerCall() }
rejectCallButton.setOnClickListener { rejectCall() }
endCallButton.setOnClickListener { endCall() }
Para atender a chamada, digite answerCall método interno MainActivity classe:
@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
}
}
}
}
}
Depois de atender a ligação, o end call O botão será exibido.
NOTA: O SuppressLint Essa anotação é usada por uma questão de simplicidade. No aplicativo de produção, você deve se certificar de que as permissões foram concedidas antes de atender a chamada.
Para rejeitar a chamada, adicione rejectCall método interno MainActivity classe:
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 encerrar a ligação, digite endCall método interno MainActivity classe:
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
}
Observe que, após rejeitar ou encerrar a chamada com sucesso, você define onGoingCall redefinir o valor da propriedade para nulo.
Fazendo uma chamada de voz de aplicativo para aplicativo
Faça uma chamada de voz a partir de um aplicativo Android para o mesmo aplicativo Android instalado em outro dispositivo usando o Client SDK.