# Chamadas VoIP no Android

O Pushwoosh suporta notificações de chamada no estilo VoIP para Android usando o módulo `pushwoosh-calls`. Isso permite a UI de chamada nativa e o gerenciamento do ciclo de vida usando a pilha de telecomunicações do Android.


## 1. Adicione o módulo `pushwoosh-calls`

Certifique-se de incluir a dependência `pushwoosh-calls` em seu projeto.

**Gradle:**

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

Substitua `<latest-version>` pela versão atual do [Maven Central](https://mvnrepository.com/artifact/com.pushwoosh/pushwoosh-calls).


## 2. Solicite permissões de chamada

Solicite as permissões necessárias em tempo de execução usando a função auxiliar:

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

PushwooshCallSettings.requestCallPermissions();
```

> Isso lida com a solicitação de permissões como `READ_PHONE_NUMBERS`, necessárias para o tratamento adequado de chamadas.



## 3. Implemente o `CallEventListener` e registre-o no Manifest

Para lidar com chamadas e eventos recebidos, implemente a interface `CallEventListener` em seu aplicativo.

#### Exemplo em Java

```java
public class DemoCallEventListener implements CallEventListener {

    @Override
    public void onAnswer(@NonNull PushwooshVoIPMessage voIPMessage, int videoState) {
        // implemente este método para navegar para a sua UI de chamada 
        Intent intent = new Intent(context, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    @Override
    public void onReject(@NonNull PushwooshVoIPMessage voIPMessage) {
        // substitua este método para lidar com chamadas rejeitadas 
    }

    @Override
    public void onDisconnect(@NonNull PushwooshVoIPMessage voIPMessage) {
        // substitua este método para lidar com chamadas desconectadas 
    }

    @Override
    public void onCreateIncomingConnection(@Nullable Bundle payload) {
        // este é o ponto mais cedo em que o payload da notificação de chamada está acessível em seu aplicativo,
        // use-o para preparar a UI do seu aplicativo para interações do usuário com as notificações de chamada
    }

    @Override
    public void onCallAdded(@NonNull PushwooshVoIPMessage voIPMessage) {
        // método de extensão do InCallService, fornece opções de personalização para dispositivos Wearable pareados
    }

    @Override
    public void onCallRemoved(@NonNull PushwooshVoIPMessage voIPMessage) {
        // método de extensão do InCallService, fornece opções de personalização para dispositivos Wearable pareados
    }
}
```

#### AndroidManifest.xml

Declare sua classe de ouvinte usando uma tag `<meta-data>`:

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


## 4. Configure as definições de chamada (opcional)

Use `PushwooshCallSettings` para ajustar o comportamento da chamada, sons e configurações de exibição.

#### Exemplo de uso

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

PushwooshCallSettings.setPhoneAccount("com.pushwoosh.voip")
PushwooshCallSettings.setPhoneAccountHandle("PushwooshCallHandle")
PushwooshCallSettings.setIncomingCallChannelName("Chamadas Recebidas")
PushwooshCallSettings.setOngoingCallChannelName("Chamadas em Andamento")
PushwooshCallSettings.setCallSound("custom_ringtone.mp3")
```


## Links relacionados

- [Visão geral do SDK Android do Pushwoosh](/pt/developer/pushwoosh-sdk/android-sdk/)
- [Código-fonte do Plugin de Chamada Pushwoosh](https://github.com/Pushwoosh/pushwoosh-android-sdk)
- [TelecomManager (Documentação do Android)](https://developer.android.com/reference/android/telecom/TelecomManager)