Internal vs External HR Monitor

Hi all -

First time posting, very new to Connect IQ.

I am trying to write an App which relies heavily upon a users heart rate - in fact it would be useless to use the app without being able to read heart rate.

I have an ANT+ HR monitor, and a Vivoactive HR.

I am trying to plan around extending my app to work on devices with both a built in HR sensor and without. Also, given the higher accuracy of most external HR monitors I would like to prioritize, or even require an external HR monitor even on devices with a built-in one (with a user setting to force the use of the internal one if they choose).

After reviewing many open source projects I have a couple questions:

  • Is it possible to differentiate between the internal HR sensor and an external one?
  • On devices with both, is it possible to prioritize one over the other?
  • How can I produce a prompt or view to wait for a connection to an external HR device, especially on devices without a built in sensor? Similar to how many of the built-in activities wait for GPS.


Also, during my initial testing I found that the ANT+ sensor seemed to disconnect and reconnect several times throughout the workout, is there any way to make the connection more stable in my code?
  • I just access the HRM as a standard sensor. If the device has Wrist-HR (WHR - OHRM), it will use that, but if the firmware connects to an external HRM, it will use that instead. If there's no WHR, it always needs and external one.

    You could use Ant+ and always use an external one BUT, some of the newer watches (f5, etc) allow for an external HRM over blue tooth, and doing ANT+ wouldn't work with BT HRM's.

    I'd just stick with the standard access to a HRM, and let the FW figure out if there was an an external one available. Be it ANT+ or BT, and if a user doesn't like the data from WHR, suggest they get an external one. That will handle all users and watches.
  • Thanks for the reply! That is what I suspected although I am surprised that there is no way to tell programatically which sensor is actively being used. I am glad to know the watch will gracefully fall-back to the WHR sensor (if available), but I would still like some way to know which sensor is actively in-use as I expect a chest strap to be more accurate than the wrist one.

    Is there anything one must include in the code in their app to enable the pop-up that displays "External HR Sensor Connected" that I see on my watch in the built-in apps when it detects the external sensor or is that function automatic?
  • Like Travis said, the toast is automatic - but only for an external HRM and when you treat the HRM as a standard sensor. if you do Ant+, all bets are off!

    If you really want to make sure there is a HRM in your own code for external or internal HRM, you'll what to check Sensor.Info and look for a valid heartRate.

    Based on your app, and if you are recording a .fit for example,you may want to wait for a valid heartRate before you start recording.

    I know in the case of GPS, I have apps that wait for a lock before the user can start recording, and it could be a few seconds after my app sees a lock that I see the toast for GPS.

    So if you do the same for HR, you could be all set a bit before the toast.
  • Great, thanks a lot for the info!