# Android 上的 VoIP 通话

Pushwoosh 支持 Android 上的 VoIP 风格通话通知，通过 `pushwoosh-calls` 模块实现。这使得使用 Android 的电信堆栈能够实现原生通话 UI 和生命周期管理。


## 1. 添加 `pushwoosh-calls` 模块

请确保在您的项目中包含 `pushwoosh-calls` 依赖项。

**Gradle：**

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

将 `<latest-version>` 替换为 [Maven Central](https://mvnrepository.com/artifact/com.pushwoosh/pushwoosh-calls) 中的当前版本。


## 2. 请求通话权限

使用辅助函数在运行时请求所需权限：

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

PushwooshCallSettings.requestCallPermissions();
```

> 这将处理 `READ_PHONE_NUMBERS` 等权限的请求，这些权限对于正确的通话处理是必需的。



## 3. 实现 `CallEventListener` 并在 Manifest 中注册

要在您的应用中处理来电和事件，请实现 `CallEventListener` 接口。

#### Java 示例

```java
public class DemoCallEventListener implements CallEventListener {

    @Override
    public void onAnswer(@NonNull PushwooshVoIPMessage voIPMessage, int videoState) {
        // 实现此方法以导航到您的通话中 UI 
        Intent intent = new Intent(context, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    @Override
    public void onReject(@NonNull PushwooshVoIPMessage voIPMessage) {
        // 覆盖此方法以处理已拒绝的通话 
    }

    @Override
    public void onDisconnect(@NonNull PushwooshVoIPMessage voIPMessage) {
        // 覆盖此方法以处理已断开连接的通话 
    }

    @Override
    public void onCreateIncomingConnection(@Nullable Bundle payload) {
        // 这是通话通知有效负载在您的应用中可访问的最早点，
        // 使用它来准备您的应用 UI，以便用户与通话通知进行交互
    }

    @Override
    public void onCallAdded(@NonNull PushwooshVoIPMessage voIPMessage) {
        // InCallService 的扩展方法，为配对的可穿戴设备提供自定义选项
    }

    @Override
    public void onCallRemoved(@NonNull PushwooshVoIPMessage voIPMessage) {
        // InCallService 的扩展方法，为配对的可穿戴设备提供自定义选项
    }
}
```

#### AndroidManifest.xml

使用 `<meta-data>` 标签声明您的监听器类：

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


## 4. 配置通话设置（可选）

使用 `PushwooshCallSettings` 来微调通话行为、声音和显示设置。

#### 示例用法

```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")
```


## 相关链接

- [Pushwoosh Android SDK 概述](/zh/developer/pushwoosh-sdk/android-sdk/)
- [Pushwoosh 通话插件源代码](https://github.com/Pushwoosh/pushwoosh-android-sdk)
- [TelecomManager (Android 文档)](https://developer.android.com/reference/android/telecom/TelecomManager)