# การโทร VoIP บน Android

Pushwoosh รองรับการแจ้งเตือนการโทรสไตล์ VoIP สำหรับ Android โดยใช้โมดูล `pushwoosh-calls` ซึ่งช่วยให้สามารถใช้งาน UI การโทรแบบเนทีฟและการจัดการวงจรชีวิตโดยใช้ telecom stack ของ Android


## 1. เพิ่มโมดูล `pushwoosh-calls`

ตรวจสอบให้แน่ใจว่าได้รวม `pushwoosh-calls` dependency ไว้ในโปรเจกต์ของคุณ

**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) {
        // implement this method to navigate to your in-call 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 this method to handle dismissed calls 
    }

    @Override
    public void onDisconnect(@NonNull PushwooshVoIPMessage voIPMessage) {
        // override this method to handle disconnected calls 
    }

    @Override
    public void onCreateIncomingConnection(@Nullable Bundle payload) {
        // this is the earliest point when call notification payload is accessible in your app,
        // use it to prepare your app UI for user interactions with call notifications
    }

    @Override
    public void onCallAdded(@NonNull PushwooshVoIPMessage voIPMessage) {
        // extension method of InCallService, provides customization options for paired Wearable devices
    }

    @Override
    public void onCallRemoved(@NonNull PushwooshVoIPMessage voIPMessage) {
        // extension method of InCallService, provides customization options for paired Wearable devices
    }
}
```

#### AndroidManifest.xml

ประกาศคลาส listener ของคุณโดยใช้แท็ก `<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](/th/developer/pushwoosh-sdk/android-sdk/)
- [ซอร์สโค้ดปลั๊กอินการโทร Pushwoosh](https://github.com/Pushwoosh/pushwoosh-android-sdk)
- [TelecomManager (เอกสารประกอบ Android)](https://developer.android.com/reference/android/telecom/TelecomManager)