Documentation Index
Fetch the complete documentation index at: https://docs.synheart.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Synheart Wear Kotlin SDK provides native Android support for streaming biometric data from wearables via Health Connect and cloud APIs (WHOOP, Garmin, Fitbit).
Installation
Gradle (Kotlin DSL)
Add JitPack repository to settings.gradle.kts:
maven { url = uri("https://jitpack.io") }
Add dependency to build.gradle.kts:
dependencies {
implementation("com.github.synheart-ai:synheart-wear-kotlin:0.3.1")
}
Requirements
- Android SDK API 21+
- Kotlin 1.8+
- Health Connect app installed
Quick Start
Initialize SDK
import ai.synheart.wear.SynheartWear
import ai.synheart.wear.config.SynheartWearConfig
import ai.synheart.wear.models.DeviceAdapter
val synheartWear = SynheartWear(
context = this,
config = SynheartWearConfig(
enabledAdapters = setOf(DeviceAdapter.HEALTH_CONNECT)
)
)
Request Permissions & Initialize
lifecycleScope.launch {
val permissions = setOf(
PermissionType.HEART_RATE,
PermissionType.STEPS,
PermissionType.CALORIES
)
val result = synheartWear.requestPermissions(permissions)
if (result[PermissionType.HEART_RATE] == true) {
synheartWear.initialize()
val metrics = synheartWear.readMetrics()
Log.d(TAG, "HR: ${metrics.getMetric(MetricType.HR)} bpm")
}
}
Real-Time Streaming
lifecycleScope.launch {
synheartWear.streamHR(intervalMs = 5000L).collect { metrics ->
val hr = metrics.getMetric(MetricType.HR)
Log.d(TAG, "Current HR: $hr bpm")
}
}
Add to AndroidManifest.xml:
<uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
<uses-permission android:name="android.permission.health.READ_STEPS"/>
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
BLE Heart Rate Monitor
Connect directly to any standard Bluetooth LE heart rate monitor for real-time HR streaming.
Setup
Add to AndroidManifest.xml:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Usage
import ai.synheart.wear.SynheartWear
import ai.synheart.wear.config.SynheartWearConfig
import ai.synheart.wear.models.DeviceAdapter
val synheartWear = SynheartWear(
context = this,
config = SynheartWearConfig(
enabledAdapters = setOf(DeviceAdapter.BLE_HRM)
)
)
val bleHrm = synheartWear.bleHrm ?: return
// Scan for nearby HR monitors
val devices = bleHrm.scan(timeoutMs = 10000, namePrefix = "WHOOP")
// Connect to a device
bleHrm.connect(deviceId = devices.first().deviceId, sessionId = "my-session")
// Collect heart rate samples
bleHrm.heartRateFlow.collect { sample ->
Log.d(TAG, "BPM: ${sample.bpm}")
sample.rrIntervalsMs?.let { rr ->
Log.d(TAG, "RR: $rr")
}
}
// Disconnect
bleHrm.disconnect()
Supported Devices
Works with any BLE device implementing the standard Heart Rate Profile (0x180D):
- WHOOP (Broadcast HR mode)
- Polar H10, OH1
- Wahoo TICKR
- Garmin HRM-Pro / HRM-Dual
Garmin Health SDK (Native RTS)
The GarminHealth facade provides native Garmin device integration for scanning, pairing, and real-time streaming using generic SDK-owned types.
Important: The Garmin Health SDK Real-Time Streaming (RTS) capability requires a separate license from Garmin. This facade is available on demand for licensed integrations. The underlying Garmin Health SDK code is proprietary to Garmin and is not distributed as open source.
import ai.synheart.wear.adapters.GarminHealth
val garmin = GarminHealth(licenseKey = "your-garmin-sdk-key")
garmin.initialize()
// Scan for devices
garmin.scannedDevicesFlow.collect { devices ->
println("Found ${devices.size} devices")
}
// Pair and read metrics
val paired = garmin.pairDevice(scannedDevice)
val metrics = garmin.readMetrics()
For cloud-based Garmin data (OAuth + webhooks), use GarminProvider instead.
Resources
For comprehensive documentation, see the full README on GitHub.