> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Daily Client SDK for Android

> Build real-time video and audio calling into your native Android applications.

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.

<CardGroup cols={3}>
  <Card title="Quickstart" icon="rocket" href="/docs/android/quickstart">
    Build a working video call app step by step
  </Card>

  <Card title="Screen sharing" icon="display" href="/docs/android/screen-share">
    Add screen share to your Android app
  </Card>

  <Card title="API reference" icon="code" href="https://reference-android.daily.co/">
    Full Kotlin/Java API docs
  </Card>
</CardGroup>

## Hello, world

Add the SDK to your `build.gradle`, then join a call:

```groovy theme={null}
dependencies {
    implementation 'co.daily:client:latest.release'
}
```

```kotlin theme={null}
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.

<CardGroup cols={2}>
  <Card title="Call lifecycle" icon="phone" href="https://reference-android.daily.co/daily-android/co.daily/-call-client/index.html">
    `join()`, `leave()`, `callState()`, `CallStateUpdated`
  </Card>

  <Card title="Participants" icon="users" href="https://reference-android.daily.co/daily-android/co.daily/-call-client/participants.html">
    `participants()`, `ParticipantJoined`, `ParticipantUpdated`, `ParticipantLeft`
  </Card>

  <Card title="Media inputs" icon="video" href="https://reference-android.daily.co/daily-android/co.daily/-call-client/update-inputs.html">
    `updateInputs()`, `setInputsEnabled()`, `startScreenShare()`, `InputsUpdated`
  </Card>

  <Card title="Publishing" icon="signal-stream" href="https://reference-android.daily.co/daily-android/co.daily/-call-client/update-publishing.html">
    `updatePublishing()`, `setIsPublishing()`, `PublishingUpdated`
  </Card>

  <Card title="Subscriptions" icon="rss" href="https://reference-android.daily.co/daily-android/co.daily/-call-client/update-subscriptions.html">
    `updateSubscriptions()`, `updateSubscriptionProfiles()`, `setSubscriptionState()`
  </Card>

  <Card title="Active speaker" icon="microphone" href="https://reference-android.daily.co/daily-android/co.daily/-call-client/active-speaker.html">
    `activeSpeaker()`, `ActiveSpeakerChanged`
  </Card>
</CardGroup>

## Resources

<CardGroup cols={2}>
  <Card title="Demo app" icon="github" href="https://github.com/daily-demos/daily-android-demo">
    A complete working example on GitHub
  </Card>

  <Card title="Starter kit" icon="toolbox" href="https://github.com/daily-demos/daily-android-starter-kit">
    Production-ready boilerplate from Daily's engineering team
  </Card>
</CardGroup>

## Requirements

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