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

在我的应用程序中可以从Androidwatch获取心率更新吗?,android,wear-os,android-sensors,samsung-gear-s2,heartrate,Android,Wear Os,Android Sensors,Samsung Gear S2,Heartrate,我有一个Android应用程序,我想从任何连接的Android手表(Wear OS、Tizen等)读取心率。在不开发可穿戴应用程序的情况下,这是否可行 我试着在传感器上注册一个监听器。键入\u HEART\u RATE,但我没有看到我显示的3块手表中的任何一块(Ticwatch E、Ticband、Gear S2)。我确保我请求了Manifest.permission.BODY\u SENSORS权限 sensorManager = getSystemService(Context.SENSOR

我有一个Android应用程序,我想从任何连接的Android手表(Wear OS、Tizen等)读取心率。在不开发可穿戴应用程序的情况下,这是否可行

我试着在
传感器上注册一个监听器。键入\u HEART\u RATE
,但我没有看到我显示的3块手表中的任何一块(Ticwatch E、Ticband、Gear S2)。我确保我请求了
Manifest.permission.BODY\u 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")
根据这些帖子和,确保您的应用程序已定义并授予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")
核实:

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

存在于您的文件AndroidManifest.xml中

另外,通过检查手表上的权限设置:设置->权限->应用程序,确保已授予权限


例如,你可以检查一下。

我使用安卓Wear手表、三星Gear S2、随机心率健身跟踪手表(Ticwatch)和独立的蓝牙心率臂带进行了一些研究

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

我的调查结果如下:

  • 我上面发布的代码示例在我的手机应用程序中,SensorManager仅适用于内置在设备中的传感器。例如,如果应用程序在手机上运行,我只会在手机上安装传感器,如果在手表上,我会在手表上安装传感器。这显然不起作用,因为没有心率传感器出现,除非手机有一个内置的。手表应用程序中的相同代码也起作用,我可以通过这种方式获得心率
  • 通过使用健身API和三星健康API,我能够在读取心率时在手机应用程序上获得更新。这个解决方案唯一的问题是你不能设置心率读数的频率。为了节省电池寿命,大多数手表在静止状态下每隔10分钟或在训练过程中每隔几秒钟将间隔时间设为上限。这也不起作用,因为我需要更多的频率更新
  • 蓝牙心率臂章是我唯一能够以我想要的频率读取心率的设备。这个解决方案需要与显示器配对,但这是一个简单的连接,我不需要开发任何手表应用程序
    我希望这能澄清SensorManager如何仅对运行应用程序的设备上的传感器起作用。

    请参阅我发布的答案。我想在不开发手表应用程序的情况下阅读手表心率传感器,我意识到从手机应用程序调用此功能不起作用,也不会显示手表传感器。我非常感谢您的调查!我只是希望我的应用程序尽可能支持hr设备。臂章-是某种型号的吗?健身API是GoogleFit API还是其他什么?三星健康API-sdk来自哪里?有可能从这项研究中看到您的代码吗?顺便说一句,谢谢。@brucemax我已经没有这方面的代码了,但我学到的是,你需要处理不同来源的人力资源设备。1.设备HR传感器-在这种情况下,您可以使用SensorManager收听心率更新2。蓝牙HR传感器-您的应用程序需要与设备配对才能直接获取HR读数3。来自Android/Samsung watches-您必须制作一个watch应用程序,以根据自己的条件(更新频率)收听这些数据,否则您可以使用Fitness API(或Samsung、Fitbit API等)收听HR更新。感谢重播。关于您的上一个案例(三星用于exmpl),我将三星健康sdk添加到我的应用程序中,下一步是什么?我如何使用他们的API来监听更新。从他们的文档中,我只能同步测量后的数据。同样来自fitbit论坛:“只有FitbitOS设备(Ionic/Versa*)支持我们的设备SDK。所有其他设备都支持我们的Web API,但它们不提供实时数据。”@brucemax,因此您可以添加三星健康SDK,并在应用程序中订阅发布的阅读资料。例如,当手表决定向手表的健康应用程序(健身、三星健康、Fitbit)发送读数时。谷歌(也许是Fitbit?)也是如此。问题是,你被限制在手表决定向应用程序发送读数的速率之内。我从测试中发现,大约每10分钟读取一次读数是不够的。如果你在手表上激活一些训练模式,这可能是一些解决办法。在训练期间,值班人员更频繁地发送数据。。也许谢谢你的回复。我决定从谷歌健身API开始