Skip to main content
The Daily Client SDK for Android is a native Kotlin/Java library built on WebRTC. It handles media negotiation, network traversal, and participant management so you can focus on building your UI.

Quickstart

Build a working video call app step by step

Screen sharing

Add screen share to your Android app

API reference

Full Kotlin/Java API docs

Hello, world

Add the SDK to your build.gradle, then join a call:
dependencies {
    implementation 'co.daily:client:latest.release'
}
import co.daily.CallClient
import co.daily.CallClientListener
import co.daily.model.Participant

val call = CallClient(applicationContext)
val videoViews = mutableMapOf<String, VideoView>()

call.addListener(object : CallClientListener {
    override fun onParticipantJoined(participant: Participant) {
        val videoView = VideoView(applicationContext)
        videoViews[participant.id] = videoView
        addVideoViewToMyUI(view = videoView)
        videoView.track = participant.media?.camera?.track
    }

    override fun onParticipantUpdated(participant: Participant) {
        videoViews[participant.id]?.track = participant.media?.camera?.track
    }
})

call.join(url = "https://your-domain.daily.co/room-name") {
    it.error?.apply { Log.e(TAG, "Error joining: $msg") }
    it.success?.apply { Log.i(TAG, "Joined successfully") }
}

// Turn off camera
call.setInputsEnabled(camera = false)

// Leave and release when done
call.leave { }
call.release()

API structure

The SDK is organized around the tasks involved in building a call. For each task you get methods to update state, methods to get current state, and events via CallClientListener to react to changes.

Call lifecycle

join(), leave(), callState(), CallStateUpdated

Participants

participants(), ParticipantJoined, ParticipantUpdated, ParticipantLeft

Media inputs

updateInputs(), setInputsEnabled(), startScreenShare(), InputsUpdated

Publishing

updatePublishing(), setIsPublishing(), PublishingUpdated

Subscriptions

updateSubscriptions(), updateSubscriptionProfiles(), setSubscriptionState()

Active speaker

activeSpeaker(), ActiveSpeakerChanged

Resources

Demo app

A complete working example on GitHub

Starter kit

Production-ready boilerplate from Daily’s engineering team

Requirements

  • minSdkVersion >= 23 (Android 6.0)
  • Kotlin 1.6 or later recommended