MultimediaClient

The primary interface for managing voice sessions within a conversation.

MultimediaClient orchestrates the lifecycle of MultimediaSession instances, providing both imperative access via currentSession and reactive observation via currentSessionFlow. It also acts as a factory for creating or joining sessions through the inherited MultimediaSessionFactory methods.

Obtaining an instance

Retrieve a MultimediaClient from CoreClient.multimediaClient(). This returns null if multimedia was not enabled at configuration time. To enable it, pass MultimediaExtension as the multimediaExtension parameter when creating a CoreConfiguration.

Starting a voice call

Voice calls are initiated via ConversationClient.changeModality(Modality.Voice), which triggers the backend to create a modality connection. The SDK then automatically creates a MultimediaSession observable through currentSessionFlow. Call MultimediaSession.join() to connect audio.

Permissions

Voice calls require the RECORD_AUDIO permission at minimum. On Android 12+ (API 31), BLUETOOTH_CONNECT is also needed for Bluetooth audio routing. On Android 13+ (API 33), POST_NOTIFICATIONS is required for the foreground service notification. Request these permissions before calling changeModality.

Requirements

  • Android O (API 26) or higher.

  • The multimedia:core module must be included as a dependency.

  • MultimediaExtension must be provided in the configuration.

See also

Samples

scope.launch {
    multimediaClient.currentSessionFlow
        .filterNotNull()
        .collect { session ->
            // Session became active; show call UI
        }
}

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard

The current MultimediaConfiguration controlling display name and notification behavior.

Link copied to clipboard

The current MultimediaSession, or null if no session is active.

Link copied to clipboard
abstract val currentSessionFlow: StateFlow<MultimediaSession?>

A StateFlow of the current MultimediaSession, or null if no session is active.

Functions

Link copied to clipboard
abstract fun configure(configure: MultimediaConfiguration.() -> Unit = { MultimediaConfiguration() }): MultimediaClient

Applies configuration changes to this client.

Link copied to clipboard
abstract fun create(modalityConnection: ModalityConnection, conversationId: UUID, displayName: String? = null): Result<MultimediaSession>

Creates a new multimedia session for the given conversation.

Link copied to clipboard
abstract fun join(modalityConnection: ModalityConnection, conversationId: UUID, displayName: String? = null): Result<MultimediaSession>

Joins an existing multimedia session for the given conversation.