Java

Finalizar una llamada

La llamada puede ser finalizada por una de las dos partes:

  • llamando a la aplicación hangup en el call instancia
  • callee colgando en el dispositivo físico

Finalizar la llamada cuando el interlocutor cuelga

Para finalizar la llamada (colgar) es necesario almacenar la referencia al objeto de llamada en curso. Añadir onGoingCall en la parte superior de MainActivity:

@Nullable private NexmoCall onGoingCall;

Es necesario almacenar la referencia de llamada en curso en el onGoingCall y añada addCallEventListener para avisarle cuando finalice la llamada. En el MainActivity actualizar el cuerpo del startCall método. Asegúrese de sustituir PHONE_NUMBER a continuación con el número de teléfono real al que desea llamar, en el campo E.164 (por ejemplo, 447700900000):

@SuppressLint("MissingPermission")
private void startCall() {
    client.call("PHONE_NUMBER", NexmoCallHandler.SERVER, new NexmoRequestListener<NexmoCall>() {
        @Override
        public void onError(@NonNull NexmoApiError nexmoApiError) {

        }

        @Override
        public void onSuccess(@Nullable NexmoCall call) {
            runOnUiThread(() -> {
                hideUI();
                endCallButton.setVisibility(View.VISIBLE);
            });

            onGoingCall = call;
            
            onGoingCall.addCallEventListener(new NexmoCallEventListener() {
                @Override
                public void onMemberStatusUpdated(NexmoCallMemberStatus callStatus, NexmoMember nexmoMember) {
                    if (callStatus == NexmoCallMemberStatus.COMPLETED || callStatus == NexmoCallMemberStatus.CANCELLED) {
                            onGoingCall = null;

                            runOnUiThread(() -> {
                                        endCallButton.setVisibility(View.INVISIBLE);
                                        startCallButton.setVisibility(View.VISIBLE);
                                    }
                            );
                        }
                }

                @Override
                public void onMuteChanged(NexmoMediaActionState nexmoMediaActionState, NexmoMember nexmoMember) {

                }

                @Override
                public void onEarmuffChanged(NexmoMediaActionState nexmoMediaActionState, NexmoMember nexmoMember) {

                }

                @Override
                public void onDTMF(String s, NexmoMember nexmoMember) {

                }
            });
        }
    });
}

Cuando finaliza la llamada (independientemente de quién la finalice, la aplicación o el destinatario), la interfaz de usuario se actualiza para reflejar el estado actual de la llamada (make a call button se muestra y END CALL está oculto).

Finalizar la llamada en la aplicación

En el MainActivity rellenar el cuerpo del hangup método:

private void hangup() {
    onGoingCall.hangup(new NexmoRequestListener<NexmoCall>() {
        @Override
        public void onError(@NonNull NexmoApiError nexmoApiError) {
            onGoingCall = null;
        }

        @Override
        public void onSuccess(@Nullable NexmoCall nexmoCall) {

        }
    });
}

Observe que después de colgar con éxito se establece el valor de la opción onGoingCall a null.

Construir y ejecutar

Pulse el botón Ctrl + R para crear y ejecutar la aplicación. Inicia y finaliza la llamada para ver los cambios en la interfaz de usuario.