Kotlin

Beenden eines Anrufs

Das Gespräch kann von einem der beiden Gesprächspartner beendet werden:

  • Anwendung durch den Aufruf der hangup Methode auf der call Instanz
  • Anrufer durch Auflegen am physischen Gerät

Anruf beenden, wenn der Anrufer auflegt

Zum Beenden des Anrufs (Auflegen) müssen Sie den Verweis auf das laufende Anrufobjekt speichern. hinzufügen onGoingCall Eigenschaft am Anfang der MainActivity:

var onGoingCall: NexmoCall? = null

Sie müssen die laufende Anrufreferenz in der onGoingCall Eigenschaft und fügen Sie addCallEventListener um Sie über das Ende des Anrufs zu informieren. Im MainActivity Aktualisieren Sie den Textkörper der startCall Methode. Bitte stellen Sie sicher, dass Sie die PHONE_NUMBER unten mit der tatsächlichen Telefonnummer, die Sie anrufen möchten, im Feld E.164 Format (z. B. 447700900000):

@SuppressLint("MissingPermission")
fun startCall() {
    client.call("PHONE_NUMBER", NexmoCallHandler.SERVER, object : NexmoRequestListener<NexmoCall> {
        override fun onSuccess(call: NexmoCall?) {
            runOnUiThread { 
                hideUI()
                endCallButton.visibility = View.VISIBLE
            }

            onGoingCall = call

            onGoingCall?.addCallEventListener(object : NexmoCallEventListener {
                override fun onMemberStatusUpdated(callStatus: NexmoCallMemberStatus, nexmoMember: NexmoMember) {
                    if (callStatus == NexmoCallMemberStatus.COMPLETED || callStatus == NexmoCallMemberStatus.CANCELLED) {
                        onGoingCall = null
                        
                        runOnUiThread { 
                            hideUI()
                            startCallButton.visibility = View.VISIBLE
                        }
                    }
                }

                override fun onMuteChanged(nexmoMediaActionState: NexmoMediaActionState, nexmoMember: NexmoMember) {}

                override fun onEarmuffChanged(nexmoMediaActionState: NexmoMediaActionState, nexmoMember: NexmoMember) {}

                override fun onDTMF(dtmf: String, nexmoMember: NexmoMember) {}
            })
        }

        override fun onError(apiError: NexmoApiError) {
        }
    })
}

Wenn der Anruf beendet wird (unabhängig davon, wer den Anruf beendet - die App oder der Anrufer), wird die Benutzeroberfläche aktualisiert, um den aktuellen Anrufstatus wiederzugeben (make a call button wird angezeigt und END CALL ist ausgeblendet).

Aufruf in der Anwendung beenden

In der MainActivity füllen den Körper des hangup Methode:

private fun hangup() {
    onGoingCall?.hangup(object : NexmoRequestListener<NexmoCall> {
        override fun onSuccess(call: NexmoCall?) {
            onGoingCall = null
        }

        override fun onError(apiError: NexmoApiError) {
        }
    })
}

Beachten Sie, dass Sie nach erfolgreichem Auflegen den Wert des Parameters onGoingCall Eigenschaft auf Null zurück.

Bauen und Ausführen

Drücken Sie die Ctrl + R Tasten, um die Anwendung zu erstellen und auszuführen. Starten und beenden Sie den Aufruf, um die Änderungen der Benutzeroberfläche zu sehen.