Android Release Notes
Version 1.4.0
New Features
- Telemetry options:
initialize()accepts atelemetry: TelemetryConfigparameter with two independent switches,analyticsanderrorReporting, putting the telemetry the SDK sends under your app's control.
API Changes
- Added
telemetry: TelemetryConfigparameter toinitialize(), defaulting toTelemetryConfig(analytics = false, errorReporting = true).
Improvements
- Various bug fixes and improvements.
Version 1.3.4
Improved microphone setup on devices that do not support the requested audio format.
Version 1.3.3
Fixed a crash during microphone setup.
Version 1.3.2
Bug fixes and improvements.
Version 1.3.0
New Features
- Slim SDK variant: The SDK now ships as two artifacts built from the same source and exposing the same
com.sleepcycle.sdkAPI.com.sleepcycle.sdk:sdk-androidembeds the encrypted ML models in the AAR as before, while the newcom.sleepcycle.sdk:sdk-android-slimships without them and downloads the models required by your granted features on the firstinitialize(), cutting roughly 15 MB of model assets out of the artifact. Depend on exactly one of the two; no code changes are needed to switch. See the Installation section of the Android guide. - Download progress:
initialize()accepts anonDownloadProgress: ((Float) -> Unit)?callback reporting model download progress as a fraction in0.0..1.0. It is invoked with1.0immediately when nothing needs to be downloaded, so the same code works with both artifacts. - Updating the smart alarm during a session:
updateSmartAlarm(config: SmartAlarmConfig?)replaces the alarm an active session started with, adds one to a session started without an alarm, or cancels it when passednull. The config is persisted, so a session resumed after a process death continues with it, and an alarm that already fired is re-armed by a new config. - Clearing persisted state:
clear(context)destroys the SDK and wipes the cached authorization token, the stored content key, and any downloaded models. The nextinitialize()re-authorizes and re-downloads what it needs. - Discarding resumable sessions:
clearActiveSessions()ends the sessionsresumeAnalysis()would pick up and discards their results, makingisResumePossible()returnfalseagain.
API Changes
- Added
onDownloadProgress: ((Float) -> Unit)?parameter toinitialize(). It now also throws the newSdkResourceExceptionwhen a model required by the granted features cannot be provisioned, andSdkNotEnoughDiskSpaceExceptionwhen there is not enough free space to download the models. Logger.setLogLevel(level)has been removed from theLoggerinterface. Log level filtering is now applied by the SDK, so a customLoggeronly needs to implementd(),i(),w(), ande(). Set the level through thelogLevelparameter ofinitialize()andSleepCycleSdk.setLogLevel()as before.startMultiChannelAnalysis()now throwsSdkFeatureUnavailablewhen asmartAlarmConfigis given for a channel other thanAnalysisChannel.PRIMARY, instead of silently ignoring it.destroy()no longer ends active sessions. It stops the data source and leaves the sessions resumable, so a session interrupted by an app shutdown can be picked up again withresumeAnalysis(). CallstopAnalysis()orstopDataSource()first to end them, orclearActiveSessions()afterwards.
Improvements
- Lower memory and CPU use: Inference sessions now use substantially less memory and CPU time over a night of analysis.
- Various bug fixes and improvements.
Version 1.2.1
Improvements
- Smaller SDK footprint: The SDK now bundles a minimal build of ONNX Runtime instead of the full runtime, shrinking the native library by roughly 24 MB per architecture.
- Improved audio classification: Updated audio classification model for improved sound detection.
Version 1.2.0
New Features
- Sleep score: Compute a per-night sleep score with
SleepScoring.compute(result, history, dateOfBirthSecondsUtc, chronoType), which returns aSleepScorewithtotal,duration,quality, androutinesubscores (each 0.0–1.0). Build history entries from a completed result viaAnalysisResult.toSleepScoreHistoryEntry()and derive the user'sChronoTypewithSleepScoring.identifyChronoType(history). - Extended audio events: New
extendedAudioEventsfeature flag exposes additionalEventTypevalues beyond the standard set. - Real-time sleep staging in results:
AnalysisResultnow includesrealTimeSleepStageIntervals, the sleep stages emitted live during the session (in addition to the post-sessionsleepStageIntervals).
API Changes
AudioEventListener.onAudioAnalysisBatchCompleted()now receivesaudioProbability: Map<EventType, Float>, the per-batch probability for each event type. Therms: FloatArrayparameter has been replaced bydbSpl: FloatArray, providing A-weighted sound volume in dB SPL.EventEndedInfonow includes aneventType: EventTypeproperty.AnalysisResultnow includestimeZoneId: String(the IANA time zone captured at session start) andrealTimeSleepStageIntervals: List<SleepStageInterval>.
Version 1.1.1
New Features
- Smart alarm: Configure a wake-up window via
SmartAlarmConfigand observe alarm lifecycle events (Armed,Triggered) through the newsmartAlarmFlow: SharedFlow<SmartAlarmEvent>. Trigger reasons includeOPTIMAL_WAKE_UP,USER_INTERACTION, andWINDOW_END. Smart alarm is gated behindSleepAnalysisFeatures.smartAlarmand only supported on the primary channel. - Stereo channel separation: New
ChannelSeparationConfigcontrols how stereo audio channels are assigned to analysis channels, with built-in presetsBED_SIDE_MICS,CENTERED_MIC_ARRAY, andDETECTION_STRENGTH_ONLY.
API Changes
- Added
smartAlarmConfig: SmartAlarmConfig?parameter tostartAnalysis()andstartMultiChannelAnalysis(). - Added
channelSeparationConfig: ChannelSeparationConfigparameter tostartAnalysis(),startDataSource(), andresumeAnalysis(). - Added
forceTokenRefresh: Booleanparameter toinitialize()to force a fresh token fetch even if a cached token exists. resumeAnalysis()now returnsList<ResumedSession>instead ofBoolean, providing session ID, channel, and smart alarm config for each resumed session.createLiveDataSource()now enables the gyroscope when the accelerometer is enabled.stopDataSource()andstopAnalysis()no longer throw when the SDK is not initialized; they return gracefully instead.
Version 1.1.0
New Features
- Multi-channel analysis: Analyze two channels simultaneously using stereo audio. New
startDataSource()/stopDataSource()methods separate the data source lifecycle from session lifecycles, with per-channel start viastartMultiChannelAnalysis(channel:)and per-session stop viastopAnalysis(sessionId:). - Audio health monitoring: New
audioHealthFlow: SharedFlow<AudioHealthUpdate>emits real-time audio input health status changes (HEALTHY,FLATLINE,MISSING_INPUT).AudioStatisticsandAudioHealthIntervalare included in the analysis result. - Session IDs on all public types:
Event,BreathingRate,SleepStageInterval,AudioClip, andAudioHealthUpdatenow include asessionId: UUIDproperty to identify which session they belong to.
API Changes
startAnalysis()now returns aUUIDidentifying the session.- Added
tag: String?parameter tostartAnalysis()for labeling sessions. AudioEventListener.onAudioAnalysisBatchCompleted()now includes asessionId: UUIDparameter.AnalysisResultnow includessleepStageIntervals,audioStatistics, andsessionIdproperties.- Added
multiChannelAnalysistoSleepAnalysisFeatures.
Version 1.0.10
Released: January 26, 2026
New Features
- Disk space checking: The SDK now checks for sufficient disk space before starting analysis and throws
SdkNotEnoughDiskSpaceExceptionif there is insufficient space available.
API Changes
- Added
SdkNotInitializedExceptionexception thrown when SDK methods are called before initialization. - Added
@throwsdocumentation forSdkNotInitializedExceptionandSdkNotEnoughDiskSpaceExceptiononstartAnalysis().
Bug Fixes
- Improved error handling when writing to the database to prevent crashes on low disk space.
Version 1.0.9
Released: January 15, 2026
New Features
- Preferred audio device: Added ability to specify a preferred audio input device via the
preferredDeviceparameter increateLiveDataSource().
API Changes
- Added support for stereo audio input.
- The
dataSourceparameter instartAnalysis()andresumeAnalysis()is now mandatory (non-nullable) with a default value ofcreateLiveDataSource(). - Added
createLiveDataSource()factory method for creating a live data source that captures from device sensors. - Made
LiveDataSourceclass public, allowing direct instantiation for custom configurations. - Extended
DataSourceinterface with new methods:audioOutputEnabled()- Check if audio output is enabledaccelerometerOutputEnabled()- Check if accelerometer output is enabledgetAudioFormat()- Returns the audio channel configuration (MONO or STEREO)
- Published artifact now includes source files (excluding internal package) for easier debugging.