通話時の音声出力(Android)

Applications内でシームレスな音声出力の切り替えを実現するには、AndroidのTelecomフレームワークを統合することをお勧めします。Telecomを利用することで、アプリは通話サービスを効率的に管理でき、スムーズなユーザー体験を確保できます。Telecomに関する詳細は、Androidの公式ドキュメントをご参照ください。 これ.

通信の統合

プロジェクトへのTelecomフレームワークの組み込みに関する包括的なガイダンスについては、以下をご参照ください。 通信システムの統合.

オーディオ出力の変化の確認

デリゲートメソッドを登録することができます onCallAudioStateChanged または onCallEndpointChanged 音声出力の変化を確認するため。

その方法は次のとおりです:

Android API 33 以前向け

override fun onCallAudioStateChanged(state: CallAudioState?) {
        state ?: return
        // highlight-next-line
        println("New call route: ${state.route}")
}

Android API 34 以降

override fun onCallEndpointChanged(callEndpoint: CallEndpoint) {
        // highlight-next-line
        println("New call endpoint: ${callEndpoint}")
}

また、以下の方法を使用して、オーディオ出力先を上書きすることもできます。 setAudioRoute または requestCallEndpointChange :

Android API 33 以前向け

call.setAudioRoute(CallAudioState.ROUTE_BLUETOOTH)

Android API 34 以降

override fun onAvailableCallEndpointsChanged(availableEndpoints: List<CallEndpoint>) {
        for (endpoint in availableEndpoints) {
            if (endpoint.endpointType == CallEndpoint.ENDPOINT_TYPE_BLUETOOTH) {
                requestCallEndpointChange(
                    endpoint,
                    Executor { it.run() },
                    object : OutcomeReceiver<Void, CallEndpointException> {
                        override fun onResult(result: Void?) {
                            // Successfully switched to Bluetooth
                        }

                        override fun onError(error: CallEndpointException) {
                            // Handle error during endpoint change
                        }
                    }
                )
                break
            }
        }
}

より快適な操作体験を得るため、これらの方法による音声出力のルーティングは避け、Telecomの標準UIのみをご利用いただくことをお勧めします。