首页 > 解决方案 > 是否可以在我的应用程序中从 Androidwatch 获取心率更新?

问题描述

我有一个 Android 应用程序,我想从任何连接的 Android 手表(Wear OS、Tizen 等)读取心率。如果不开发可穿戴应用程序,这可能吗?

我尝试在 上注册一个听众,Sensor.TYPE_HEART_RATE但我没有看到我出现的 3 块手表中的任何一个(Ticwatch E、Ticband、Gear S2)。我确保我请求了Manifest.permission.BODY_SENSORS许可。

sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager?

    heartRateSensor = sensorManager?.getDefaultSensor(Sensor.TYPE_HEART_RATE)

    val registered = sensorManager?.registerListener(this, heartRateSensor, SensorManager.SENSOR_DELAY_NORMAL)
    Log.i(TAG, if (registered!!) "Registered Listener" else "Failed to register listener")

标签: androidwear-osandroid-sensorssamsung-gear-s2heartrate

解决方案


我使用 Android Wear 手表、Samsung Gear S2、随机心率健身追踪器手表 (Ticwatch) 和独立的蓝牙心率臂带进行了一些研究。

重申一下我的目标是通过我的手机应用程序从手表传感器读取心率数据,而无需制作手表应用程序。

我的发现如下:

  1. 我在上面发布的代码示例在我的手机应用程序中,SensorManager 仅适用于设备内置的传感器。例如,如果应用程序在手机上运行,​​我只会在手机上获取传感器,如果在手表上,我会在手表上获取传感器。这显然不起作用,因为除非手机内置了心率传感器,否则不会出现心率传感器。手表应用程序中的相同代码有效,我能够以这种方式获得心率。
  2. 使用 Fitness API 和 Samsung Health API,我能够在读取心率时在手机应用程序上获取更新。此解决方案的唯一问题是您无法设置心率读数的频率。为了节省电池寿命,大多数手表似乎在静止时每 10 分钟或在锻炼期间每隔几秒限制间隔。这也不起作用,因为我需要更多的频率更新。
  3. 蓝牙心率臂带是我能够以我想要的频率读取心率的唯一方法。此解决方案需要与显示器配对,但连接很简单,我不需要开发任何手表应用程序!

我希望这能阐明 SensorManager 如何仅适用于运行应用程序的设备上的传感器。


推荐阅读