Skip to main content
Faster Integration with UI KitsIf you’re using CometChat UI Kits, voice and video calling can be quickly integrated:
  • Incoming & outgoing call screens
  • Call buttons with one-tap calling
  • Call logs with history
👉 Android UI Kit Calling IntegrationUse this Calls SDK directly only if you need custom call UI or advanced control.
This guide walks you through installing the CometChat Calls SDK and initializing it in your Android application.

Add the CometChat Dependency

Step 1: Add Repository

Add the CometChat repository URL to your project level build.gradle file in the repositories block. Keep google() and mavenCentral() in the list: the Calls SDK’s WebRTC library (org.jitsi:webrtc) is resolved from Maven Central.
If your project declares repositories in settings.gradle (dependencyResolutionManagement) instead of allprojects, add the same three entries there.

Step 2: Add Dependencies

Add the Calls SDK dependency to your app level build.gradle file:
Ringing users? Incoming calls ring through the Push Notifications SDK’s calls module. Add com.cometchat:push-notifications-android:2.0.0 and com.cometchat:push-notifications-calls-android:2.0.0 as well, and follow Push Ringing. The Calls SDK alone can start, join and end calls, but it cannot ring a device that is not running your app.
Set minSdkVersion to 26 or higher. The Calls SDK 5.1 declares minSdk 26 (5.0 was 24), so a lower value fails the build at the manifest merger: uses-sdk:minSdkVersion 24 cannot be smaller than version 26 declared in library [...].
The Calls SDK carries its own React Native runtime, relocated to the cometchat.rn.* namespace so it does not clash with other React Native code in your app, and it initializes the runtime’s native libraries itself. Do not add react-android or soloader dependencies or call SoLoader.init for the Calls SDK.

Step 3: Configure Java Version

Add Java 17 compatibility to the android section of your app level build.gradle — the Calls SDK is built with Java 17. The kotlinOptions block applies only if your module uses Kotlin (Java-only modules should omit it); on Kotlin 2.x, prefer compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }:

Add Permissions

The Calls SDK’s own manifest declares the permissions a call needs (INTERNET, CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS, ACCESS_NETWORK_STATE, the microphone and camera foreground-service types, and others), and Android merges them into your app. There is nothing to add to your AndroidManifest.xml for audio and video calls.

Screen sharing (opt-in)

Screen sharing is opt-in. Android needs a foreground service of type mediaProjection to share the screen, and Google Play asks every app that declares one to justify it, so the Calls SDK removes that service from the merged manifest. Until your app declares it, the screen share button is hidden in the call UI. To enable screen sharing, add the permission and the service to your AndroidManifest.xml:
The SDK checks for the service (with the mediaProjection type) and, when your app targets Android 14 or later, for the permission. If either is missing, it logs why and keeps the screen share button hidden.
Request camera and microphone permissions at runtime before starting or joining a call. When a call is answered from the Push SDK’s ring, the SDK asks for them before opening your answer activity; a denied microphone joins muted. On Android 14+ the call’s foreground service is blocked while the microphone permission is missing.

Initialize CometChat Calls

The init() method initializes the SDK with your app credentials. Call this method once when your application starts, typically in your Application class or main Activity.

CallAppSettings

The CallAppSettings class configures the SDK initialization:
Initialize once. The SDK keeps the settings from its first init(); a later init() with the same app ID is ignored for the rest of the process. A later init() with a different app ID logs the user out and re-creates the SDK with the new settings. If you use the CometChat UI Kit with enableCalling, it initializes the Calls SDK for you, so do not call init() again yourself.

Check Initialization Status

You can verify if the SDK has been initialized using the isInitialized() method: