# Llamadas VoIP en Android

Pushwoosh es compatible con notificaciones de llamadas estilo VoIP para Android utilizando el módulo `pushwoosh-calls`. Esto habilita la interfaz de usuario de llamadas nativa y la gestión del ciclo de vida utilizando la pila de telecomunicaciones de Android.


## 1. Añade el módulo `pushwoosh-calls`

Asegúrate de incluir la dependencia `pushwoosh-calls` en tu proyecto.

**Gradle:**

```groovy
dependencies {
    implementation 'com.pushwoosh:pushwoosh-calls:<latest-version>'
}
```

Reemplaza `<latest-version>` con la versión actual de [Maven Central](https://mvnrepository.com/artifact/com.pushwoosh/pushwoosh-calls).


## 2. Solicita permisos de llamada

Solicita los permisos necesarios en tiempo de ejecución utilizando la función de ayuda:

```java
import com.pushwoosh.calls.PushwooshCallSettings;

PushwooshCallSettings.requestCallPermissions();
```

> Esto se encarga de solicitar permisos como `READ_PHONE_NUMBERS`, necesarios para el manejo adecuado de las llamadas.



## 3. Implementa `CallEventListener` y regístralo en el Manifest

Para manejar llamadas entrantes y eventos, implementa la interfaz `CallEventListener` en tu aplicación.

#### Ejemplo en Java

```java
public class DemoCallEventListener implements CallEventListener {

    @Override
    public void onAnswer(@NonNull PushwooshVoIPMessage voIPMessage, int videoState) {
        // implementa este método para navegar a tu interfaz de usuario en llamada 
        Intent intent = new Intent(context, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    @Override
    public void onReject(@NonNull PushwooshVoIPMessage voIPMessage) {
        // sobrescribe este método para manejar llamadas rechazadas 
    }

    @Override
    public void onDisconnect(@NonNull PushwooshVoIPMessage voIPMessage) {
        // sobrescribe este método para manejar llamadas desconectadas 
    }

    @Override
    public void onCreateIncomingConnection(@Nullable Bundle payload) {
        // este es el punto más temprano en el que el payload de la notificación de llamada es accesible en tu aplicación,
        // úsalo para preparar la interfaz de usuario de tu aplicación para las interacciones del usuario con las notificaciones de llamada
    }

    @Override
    public void onCallAdded(@NonNull PushwooshVoIPMessage voIPMessage) {
        // método de extensión de InCallService, proporciona opciones de personalización para dispositivos Wearable emparejados
    }

    @Override
    public void onCallRemoved(@NonNull PushwooshVoIPMessage voIPMessage) {
        // método de extensión de InCallService, proporciona opciones de personalización para dispositivos Wearable emparejados
    }
}
```

#### AndroidManifest.xml

Declara tu clase de escucha usando una etiqueta `<meta-data>`:

```xml
<meta-data
    android:name="com.pushwoosh.CALL_EVENT_LISTENER"
    android:value="com.pushwoosh.demoapp.DemoCallEventListener" />
```


## 4. Configura los ajustes de llamada (opcional)

Usa `PushwooshCallSettings` para ajustar el comportamiento de las llamadas, los sonidos y la configuración de visualización.

#### Ejemplo de uso

```kotlin
import com.pushwoosh.calls.PushwooshCallSettings

PushwooshCallSettings.setPhoneAccount("com.pushwoosh.voip")
PushwooshCallSettings.setPhoneAccountHandle("PushwooshCallHandle")
PushwooshCallSettings.setIncomingCallChannelName("Incoming Calls")
PushwooshCallSettings.setOngoingCallChannelName("Ongoing Calls")
PushwooshCallSettings.setCallSound("custom_ringtone.mp3")
```


## Enlaces relacionados

- [Resumen del SDK de Pushwoosh para Android](/es/developer/pushwoosh-sdk/android-sdk/)
- [Código fuente del plugin de llamadas de Pushwoosh](https://github.com/Pushwoosh/pushwoosh-android-sdk)
- [TelecomManager (Documentación de Android)](https://developer.android.com/reference/android/telecom/TelecomManager)