Android SDK Releases
1.2.0.208
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.