是否可以在我的应用程序中从 Androidwatch 获取心率更新?

Is it possible to get heart rate updates from a Androidwatch in my app?

我有一个 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")

根据这些帖子 1 and 2,确保您的应用程序已定义并授予 Body 传感器权限。

Verify that:

<uses-permission android:name="android.permission.BODY_SENSORS"/>

is present in your wear AndroidManifest.xml

Also, ensure that the permission has been granted by checking the Permissions settings on the watch: Settings -> Permissions -> Your app

例如,您可以检查此 GitHub link

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

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

我的发现如下:

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

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