Android SDK Releases
1.2.0.208
Dependency coords unchanged (libwebrtc:M134, autobahn-android-legacy:20.2.1). Section written to match the existing doc style:
Photo-mode video quality boost, faster rear-camera autofocus, Samsung Bluetooth crash fix, and camera orientation fixes.
To use this version, add the following Maven coordinates to your app-level build.gradle or build.gradle.kts file.
Kotlin DSL (build.gradle.kts):
dependencies {
implementation("group.ccr.ecv:ecv-175-sdk:1.2.0.208")
implementation("org.webrtc:libwebrtc:M134")
implementation("group.ccr.ecv.external:autobahn-android-legacy:20.2.1")
}
Groovy (build.gradle):
dependencies {
implementation 'group.ccr.ecv:ecv-175-sdk:1.2.0.208'
implementation 'org.webrtc:libwebrtc:M134'
implementation 'group.ccr.ecv.external:autobahn-android-legacy:20.2.1'
}
The
libwebrtcandautobahn-android-legacyversions are unchanged from 1.0.18.125. If you are upgrading from that version, only theecv-175-sdkline needs to change.
⚠️ Required before upgrading
1. Declare and request BLUETOOTH_CONNECT (Android 12 / API 31+)
If your app supports Bluetooth headsets during calls, add to your AndroidManifest.xml:
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
…and request it at runtime before starting a call. Without it, calls still work — audio simply routes to the earpiece/speaker instead of the headset. Previously the SDK attempted Bluetooth access without this permission, which caused crashes on some Samsung devices.
2. Higher camera capture resolution
The camera is now opened at up to 1080×1440 so photo mode can switch instantly. The stream transmitted during normal call time is unchanged — still your configured videoWidth × videoHeight. Expect slightly higher device power and memory use. Set photoModeVideoBoostEnabled = false to restore the previous behavior.
New — Photo-mode video quality boost
When the agent starts photo capture, the SDK automatically raises the outgoing video resolution and drops back when capture ends. No call interruption, no reconnection. Enabled by default — no code changes required.
New optional ConnectParameters fields:
val params = ConnectParameters(
// ... your existing parameters ...
photoModeVideoBoostEnabled = true, // false = pre-1.2.0 behavior
photoModeVideoWidth = 1080,
photoModeVideoHeight = 1440,
photoModeVideoMaxBitrate = 0, // 0 = leave bitrate unchanged during photo mode
photoModeMaintainResolution = false, // true = drop framerate before resolution on weak networks
photoModeMinFps = 10, // ...floor: give up below this framerate
photoModeRecoverFps = 25 // ...and resume once it recovers
)
| Parameter | Default | Description |
|---|---|---|
photoModeVideoBoostEnabled |
true |
Master switch for the whole feature |
photoModeVideoWidth / photoModeVideoHeight |
1080 / 1440 |
Resolution sent during photo capture |
photoModeVideoMaxBitrate |
0 |
Bitrate cap (kbps) during photo mode; 0 leaves it untouched |
photoModeMaintainResolution |
false |
Keep resolution and lower framerate on poor connections |
photoModeMinFps |
10 |
Framerate floor before resolution is allowed to drop |
photoModeRecoverFps |
25 |
Framerate at which resolution-maintaining resumes |
Aspect ratio: if you override
photoModeVideoWidth/photoModeVideoHeight, keep the same aspect ratio asvideoWidth/videoHeight(both default to 3:4). A mismatched ratio will fail call recording.
Improvements
- Faster rear-camera autofocus — the rear camera now uses a photo-optimized autofocus mode. Documents and ID cards held close to the lens lock focus noticeably faster.
- Faster reconnection after network blips — the first signaling reconnect attempt now fires almost immediately (100 ms instead of 1 s), so brief interruptions rejoin the existing call instead of dropping it.
- Improved diagnostics — the SDK logs which camera API it selected and why, plus camera orientation details. Please include your logs when reporting a camera-related issue.
Fixes
- Fixed a crash on some Samsung devices when the SDK inspected Bluetooth audio devices during a call. Bluetooth handling is now fully fault-tolerant.
- Fixed upside-down video on certain devices using the legacy camera API.
Compatibility
No changes to the public call API. Existing integrations compile and run unchanged once the BLUETOOTH_CONNECT item above is addressed.
What's New
Sharper photos during agent capture
When the agent starts photo capture, the SDK now automatically raises the outgoing video to a higher resolution (1080×1440 by default) and drops back to normal call resolution when capture ends. The switch is instant — no call interruption, no camera restart, no reconnection.
This is on by default. No code changes needed to benefit from it.
Tunable via ConnectParameters if you need different behavior:
val params = ConnectParameters(
// ...
photoModeVideoBoostEnabled = true, // set false for previous behavior
photoModeVideoWidth = 1080, // photo-mode resolution
photoModeVideoHeight = 1440, // must keep same aspect ratio as videoWidth/videoHeight
photoModeVideoMaxBitrate = 0, // 0 = leave bitrate unchanged during photo mode
photoModeMaintainResolution = false, // true = prefer dropping framerate over resolution on weak networks
photoModeMinFps = 10, // ...but give up if framerate falls below this
photoModeRecoverFps = 25 // ...and resume once it recovers
)
On weak connections, photoModeMaintainResolution = true keeps the image sharp by lowering framerate instead — with a safety floor so the video never becomes a slideshow.
Faster rear-camera focus
The rear camera now focuses using a photo-optimized autofocus mode. Documents and ID cards held close to the lens lock focus noticeably faster and more decisively.
Fixes
- Crash on some Samsung devices — calls could crash while the SDK inspected Bluetooth audio devices. Bluetooth handling is now fully fault-tolerant; a Bluetooth problem can no longer end a call.
- Upside-down camera on certain devices — the local and remote video appeared inverted on some older/legacy-camera devices. Fixed.
- Faster reconnection after a network blip — the SDK now retries the signaling connection almost immediately (100 ms instead of 1 s), so short network interruptions reconnect to the existing call instead of dropping it.
- Better support diagnostics — the SDK now logs which camera API it selected and why, plus camera orientation details. Speeds up device-specific issue triage; include your logs when reporting a camera problem.
Action Required Before Upgrading
1. Bluetooth permission (Android 12 / API 31+)
If your app supports Bluetooth headsets, it must declare and request at runtime the BLUETOOTH_CONNECT permission:
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Without it, calls still work — audio simply routes to the earpiece/speaker instead of the headset. Previously the SDK attempted to use Bluetooth without this permission, which is what caused the Samsung crash.
2. Camera opens at higher resolution
The camera is now opened at up to 1080×1440 by default so photo mode can switch instantly. Expect slightly higher device power/memory use during calls. The transmitted stream during normal call time is unchanged — still your configured videoWidth × videoHeight.
To restore the previous behavior:
photoModeVideoBoostEnabled = false
3. Photo-mode aspect ratio
If you override photoModeVideoWidth/photoModeVideoHeight, keep the same aspect ratio as your videoWidth/videoHeight. A mismatched ratio will fail call recording.
Compatibility
No changes to the public call API. Existing integrations compile and run unchanged after the permission item above is addressed.
1.1.0.134
- SDK Http requests, handled DNS probing errors.
- SDK Http requests, handled tcp socket errors.
- QueueSocket double-free crash fixed.
1.0.20.54
- Fixed a bug when agent mutes themselves user is muted too (audio/video).
1.0.19.152
- Attributes["Mobile"] is set to "Android" for recorder rotation fix
- Fixed a crash when changing camera rotation when the flash is open on certain devices.
1.0.19.118
- Changed the order of switchCamera() action and TakePhotoOn/TakePhotoOff events. From now on the the events will be triggered after the camera is updated to fix visual glitches in certain devices
1.0.19.82
- Fixed application crash when DialEx receives a network exception, It will instead raise this event
VideoCallEvent(
CallEventTypes.Error,
error = ECVError.DIAL_FAILED,
detail = "EXCEPTION: " + e.message,
objData = e
)
- Fixed application crash when WaitForRoomInterval receives a network exception.
VideoCallEvent(
CallEventTypes.Error,
error = ECVError.WAIT_FOR_ROOM_FAILED,
detail = "EXCEPTION: " + e.message,
objData = e
)
1.0.18.125
This is the first version distributed via our Artifactory repository.
Artifact Distribution Update
Starting with version 1.0.18.125, all new releases of the ECV SDK and its dependencies are published to our official Artifactory repository.
Manual download and management of .aar files is now deprecated. To integrate the SDK, you must first add our repository to your project's settings.gradle file. This is a one-time setup.
Add the Repository to your Project
Add the following maven block inside the repositories block of your project-level settings.gradle.kts (or settings.gradle) file.
For Kotlin DSL (settings.gradle.kts):
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
// --- Add the ECV Artifactory Repository Here ---
maven {
url = uri("https://repo.easyconnect.cloud/repository/android-maven-public/")
}
// --- End ---
}
}
For Groovy DSL (settings.gradle):
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
// --- Add the ECV Artifactory Repository Here ---
maven {
url 'https://repo.easyconnect.cloud/repository/android-maven-public/'
}
// --- End ---
}
}
After adding the repository, you can declare the dependencies in your app-level build.gradle file as shown in the release notes below.
1.0.18.125
This is the first version distributed via our Artifactory repository.
To use this version, add the following Maven coordinates to your app-level build.gradle or build.gradle.kts file.
Kotlin DSL (build.gradle.kts):
dependencies {
implementation("group.ccr.ecv:ecv-175-sdk:1.0.18.125")
implementation("org.webrtc:libwebrtc:M134")
implementation("group.ccr.ecv.external:autobahn-android-legacy:20.2.1")
}
Groovy (build.gradle):
dependencies {
implementation 'group.ccr.ecv:ecv-175-sdk:1.0.18.125'
implementation 'org.webrtc:libwebrtc:M134'
implementation 'group.ccr.ecv.external:autobahn-android-legacy:20.2.1'
}
Additional Resources
- Java fragment example: MQVideoActivity.java
Legacy Versions (Manual .aar Download)
The following versions were distributed as direct .aar file downloads. This distribution method is deprecated.
1.0.18.108
Files
| File | Algorithm | Hash |
|---|---|---|
| ECV-175-SDK-1.0.18.108-release.aar | SHA256 | C05CB101286CE65FDE973132632D324D1E879017E705B354A67BB12F11A59315 |
| autobahn-android-legacy-20.2.1.aar | SHA256 | B510E1B607DCB77D059BCD09D53539B5E56CF99094ED4040709C27EE23347330 |
| M134-libwebrtc.aar | SHA256 | 3524B0992A6FB53C3DBA527EF994DD060FA75B909763A9D4047064CB7FCDE4F1 |
1.0.18.106
- Fixed
StartHoldandEndHoldevents not being sent whenconnectParams.autoHandleHoldSideEffectsis set to false.
Files
| File | Algorithm | Hash |
|---|---|---|
| ECV-175-SDK-1.0.18.106-release.aar | SHA256 | 68ED1CF60D49CF6111637FED1D38908834AEA1671948AB24511479E0583D118A |
| autobahn-android-legacy-20.2.1.aar | SHA256 | B510E1B607DCB77D059BCD09D53539B5E56CF99094ED4040709C27EE23347330 |
| M134-libwebrtc.aar | SHA256 | 3524B0992A6FB53C3DBA527EF994DD060FA75B909763A9D4047064CB7FCDE4F1 |
1.0.18.95
Files
| File | Algorithm | Hash |
|---|---|---|
| ECV-175-SDK-1.0.18.95-release.aar | SHA256 | C7ECEE22B357C7198FB0F31388136DA3ECF4689D2BA23352BF71E4F0ED091DC6 |
| autobahn-android-legacy-20.2.1.aar | SHA256 | B510E1B607DCB77D059BCD09D53539B5E56CF99094ED4040709C27EE23347330 |
| M134-libwebrtc.aar | SHA256 | 3524B0992A6FB53C3DBA527EF994DD060FA75B909763A9D4047064CB7FCDE4F1 |
1.0.18.73
Changes
- Properties within
ConnectParameterscan now be set outside of the constructor. - The requirement to detach the previous renderer when switching between local and remote camera renderers has been removed. (You still need to call them if using a completely new
SurfaceViewRendererobject). videoCall.getWebRtcConnection().attachLocalViewandvideoCall.getWebRtcConnection().attachRemoteViewcan now be called as soon as the videoActivityis opened, without waiting for any events.