Device: Forerunner 970, firmware 18.32, SDK 9.2.0. No paired external sensors, Pulse Ox set to "during sleep".
Repro: one do-nothing watch app (blank screen, one-minute timer, logs battery every 5 minutes), built in variants that differ only in manifest permissions. Each was run worn for 1.5–3.3 hours with no input.
| Variant | Permissions | Battery use |
|---|---|---|
| PNONE | none | ≤ 0.6 %/h |
| PSENSOR | Sensor | 1.9–2.1 %/h |
| PALL | Sensor, SensorHistory, Background, Notifications | 2.25–2.7 %/h |
| PSQUIET | Sensor, plus enableSensorEvents(null), setEnabledSensors([]) and disableSensorType(SENSOR_ONBOARD_HEARTRATE / SENSOR_ONBOARD_PULSE_OXIMETRY) at launch |
1.8–2.1 %/h; both disableSensorType calls return false |
| (no app open, overnight) | — | 0.41 %/h |
PSENSOR never calls any Toybox.Sensor function. Declaring the permission is enough to add about 1.5 %/h for as long as the app is open. The watch's battery page puts all of it under "Sensors & Accessories".
Expected: the Sensor permission alone, with no listener registered and no sensor enabled, should cost nothing extra. Or setEnabledSensors([]) / disableSensorType should bring the cost back to the no-permission level.
Impact: alarm and sleep apps have to stay open overnight (there's no unattended launch), so users lose 12–16 % a night.
Possibly related: "Venu 2S battery drain with the Sensor permission" (2021), and reports of Sensor-handler drain on the FR x55/x65 lines.
<?xml version="1.0"?>
<iq:manifest xmlns:iq="http://www.garmin.com/xml/connectiq" version="3">
<iq:application id="b687a2dd1287b8045c1dc63fcdb0de43" type="watch-app" name="@Strings.AppName" entry="ProbeApp" launcherIcon="@Drawables.LauncherIcon" minApiLevel="3.1.0">
<iq:products><iq:product id="fr970"/></iq:products>
<iq:permissions>
</iq:permissions>
<iq:languages><iq:language>eng</iq:language></iq:languages>
<iq:barrels/>
</iq:application>
</iq:manifest>
<?xml version="1.0"?>
<iq:manifest xmlns:iq="http://www.garmin.com/xml/connectiq" version="3">
<iq:application id="b687a2dd1287b8045c1dc63fcdb0de43" type="watch-app" name="@Strings.AppName" entry="ProbeApp" launcherIcon="@Drawables.LauncherIcon" minApiLevel="3.1.0">
<iq:products><iq:product id="fr970"/></iq:products>
<iq:permissions>
</iq:permissions>
<iq:languages><iq:language>eng</iq:language></iq:languages>
<iq:barrels/>
</iq:application>
</iq:manifest>