我有一个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")
我使用安卓Wear手表、三星Gear S2、随机心率健身追踪器手表(Ticwatch(和独立的蓝牙心率臂带进行了一些研究。
只是重申一下,我的目标是在不制作手表应用程序的情况下,通过手机应用程序读取手表传感器的心率数据。
我的发现如下:
- 我上面发布的代码示例在我的手机应用程序中,SensorManager只适用于内置在设备中的传感器。例如,如果应用程序在手机上运行,我只会在手机上安装传感器,如果在手表上,我会在手表上安装传感器。这显然不起作用,因为除非手机内置了心率传感器,否则不会出现心率传感器。手表应用程序中的相同代码也起作用,我可以通过这种方式获取心率
- 使用Fitness API和Samsung Health API,我可以在读取心率时在手机应用程序上获得更新。这个解决方案的唯一问题是你不能设置心率读数的频率。为了节省电池寿命,看起来大多数手表在静止时将间隔时间限制为每10分钟一次,或者在锻炼时每隔几秒钟一次。这也不起作用,因为我需要更多的频率更新
- 蓝牙心率袖标是我唯一能以我想要的频率读取心率的袖标。这个解决方案需要与显示器配对,但这是一个简单的连接,我不需要开发任何手表应用程序
我希望这能澄清SensorManager如何仅适用于运行应用程序的设备上的传感器。
根据这些帖子1和2,确保您的应用程序已定义并授予Body Sensor权限。
验证:
<uses-permission android:name="android.permission.BODY_SENSORS"/>
存在于您的服装AndroidManifest.xml 中
此外,通过检查手表上的权限设置,确保已授予权限:设置->权限->您的应用
例如,您可以查看此GitHub链接。