Kotlin

電話を受ける

電話をかける前に、アプリケーションに電話を受ける機能を追加しましょう。追加 onGoingCallID そして callInviteID プロパティは MainActivity クラスである:

private var onGoingCallID: CallId? = null
private var callInviteID: CallId? = null

着信コールをリッスンするには、着信コールリスナーを onCreate メソッド MainActivity クラスである:

client.setCallInviteListener { callId, from, channelType ->
    callInviteID = callId
    runOnUiThread {
        hideUI()
        answerCallButton.visibility = View.VISIBLE
        rejectCallButton.visibility = View.VISIBLE
    }
}

アプリは着信イベントをリッスンします。上記のコードでは、着信イベントを受信すると、応答ボタンと着信拒否ボタンが表示されます。以下のように callInviteID を参照し、後でコールとやりとりする。

UIを使ってアクションを実行する前に、ボタンにリスナーを追加する必要があります。このコードを onCreate 内部 MainActivity クラスである:

answerCallButton.setOnClickListener { answerCall() }
rejectCallButton.setOnClickListener { rejectCall() }
endCallButton.setOnClickListener { endCall() }

電話に出るには answerCall メソッド MainActivity クラスである:

@SuppressLint("MissingPermission")
private fun answerCall() {
    callInviteID?.let {
        client.answer(it) {
            err ->
            when {
                err != null -> {
                    connectionStatusTextView.text = err.localizedMessage
                }
                else -> {
                    onGoingCallID = it
                    hideUI()
                    endCallButton.visibility = View.VISIBLE
                }
            }
        }
    }
}

電話に出た後 end call ボタンが表示されます。

注: について SuppressLint アノテーションを使用しています。本番アプリでは、呼び出しに応答する前にパーミッションが付与されていることを確認する必要があります。

通話を拒否するには rejectCall メソッド MainActivity クラスである:

private fun rejectCall() {
    callInviteID?.let {
        client.reject(it) { err ->
            when {
                err != null -> {
                    connectionStatusTextView.text = err.localizedMessage
                }
                else -> {
                    hideUI()
                    startCallButton.visibility = View.VISIBLE
                    waitingForIncomingCallTextView.visibility = View.VISIBLE
                }
            }
        }
        onGoingCallID = null
    }
}

通話を終了するには endCall メソッド MainActivity クラスである:

private fun endCall() {
    onGoingCallID?.let {
        client.hangup(it) {
            err ->
            when {
                err != null -> {
                    connectionStatusTextView.text = err.localizedMessage
                }
                else -> {
                    hideUI()
                    startCallButton.visibility = View.VISIBLE
                    waitingForIncomingCallTextView.visibility = View.VISIBLE
                }
            }
        }
    }
    onGoingCallID = null
}

着信拒否または通話終了に成功した後、次のように設定することに注意。 onGoingCall プロパティの値をnullに戻す。