Device: Garmin Fenix 6X Pro paired to Samsung Galaxy A15 5G (Android 16 / One UI 8)
Garmin Connect version: latest from Play Store
Issue:
Garmin Connect registers a CompanionDeviceManager (CDM) association with the
COMPANION_DEVICE_WATCH profile, but never calls
CompanionDeviceManager.notifyDeviceAppeared(associationId) after a BLE connection
is established.
On Android 13+ (API 33+), notifyDeviceAppeared() is required to signal to the
Android OS that the companion device is nearby. Without this call, Android's app
standby bucket exemption for the companion app degrades over time. On Android 16
with Samsung's aggressive background process management, this results in the
background BLE service being killed, after which Samsung's BT stack removes the
stale BLE bond entirely — requiring a full re-pair from scratch.
Root cause:
The method onDeviceConnected() in the device sync state machine (z12.C51109d0,
implementing the device connection interface) is completely empty. This is where
notifyDeviceAppeared() should be called.
Fix:
In the onDeviceConnected() callback, retrieve the CompanionDeviceManager system
service and call notifyDeviceAppeared() for each association returned by
getMyAssociations(). Guard with SDK_INT >= 33. Wrap in try/catch.
Impact:
Any user on Android 13+ with aggressive battery management (especially Samsung
One UI 7/8 or Android 16) will experience repeated unpairings. The CDM record
shows mLastTimeConnectedMs=None despite regular connections, confirming the call
is nev