Kotlin

Recevoir un appel

Avant de passer un appel, ajoutons à l'application la possibilité de recevoir un appel. Ajouter onGoingCallID et callInviteID en haut de la page MainActivity classe :

private var onGoingCallID: CallId? = null
private var callInviteID: CallId? = null

Pour écouter les appels entrants, ajoutez incoming call listener à la fin de onCreate méthode à l'intérieur MainActivity classe :

client.setCallInviteListener { callId, from, channelType ->
    callInviteID = callId
    runOnUiThread {
        hideUI()
        answerCallButton.visibility = View.VISIBLE
        rejectCallButton.visibility = View.VISIBLE
    }
}

L'application va maintenant écouter l'événement d'appel entrant. Le code ci-dessus montre les boutons de réponse et de rejet de l'appel lorsque l'événement d'appel entrant est reçu. Notez que vous enregistrez callInviteID pour interagir ultérieurement avec l'appel.

Avant de pouvoir effectuer des actions à l'aide de l'interface utilisateur, vous devez également ajouter des récepteurs aux boutons. Ajoutez ce code à la fin de la section onCreate à l'intérieur MainActivity classe :

answerCallButton.setOnClickListener { answerCall() }
rejectCallButton.setOnClickListener { rejectCall() }
endCallButton.setOnClickListener { endCall() }

Pour répondre à l'appel, ajoutez answerCall méthode à l'intérieur 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
                }
            }
        }
    }
}

Après avoir répondu à l'appel, le end call s'affiche.

NOTE : Les SuppressLint est utilisée pour des raisons de simplicité. Dans l'application de production, vous devez vous assurer que les autorisations sont accordées avant de répondre à l'appel.

Pour rejeter l'appel, ajoutez rejectCall méthode à l'intérieur 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
    }
}

Pour mettre fin à l'appel, ajoutez endCall méthode à l'intérieur 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
}

Remarquez qu'après avoir réussi à rejeter l'appel ou à y mettre fin, vous réglez le paramètre onGoingCall à la valeur null de la propriété.