问题 如何在Android Wearable中访问心率传感器?


我在Moto 360上访问心率传感器时遇到了问题。

我试过以下事情:

Sensor mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);

然后实现SensorEventListener接口:

@Override
public void onSensorChanged(SensorEvent event) {

        String TAG = "tag";
        Log.i(TAG, "--------------------------");
        Log.i(TAG, msg);
        Log.i(TAG, ""+ event.sensor.getType());
        Log.i("live","--------------");

而对我来说奇怪的是我根本没有得到任何信息(不仅是心率)。

此外,我尝试列出所有传感器,但它没有在列表中显示心率传感器。

当然我添加了持久性

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.watchtest" >

<uses-feature android:name="android.hardware.type.watch" />
<uses-permission android:name="android.permission.BODY_SENSORS" />

有任何想法吗 ?

谢谢。

W上。


8863
2017-10-21 14:32


起源

您是否尝试过更新SDK? 链接 - Kent
我同意Kent,确保您的SDK是最新的,有人修复了类似的问题: stackoverflow.com/questions/25820771/... - Murphy
@Kent项目是否与SDK有关?因为我有最新的SDK,它没有用。但是当我创建新项目时,它开始工作。 - wonglik
我有同样的问题。我得到一个短暂的时间周期的som值,然后它返回相同的值一分钟左右,然后给它一些不同的值,然后它再次停止。接缝就像是Moto 360的一般问题。 - Asle Benjamin Kinnerød


答案:


在我做了以下之后开始为我工作:

  1. 从手表中卸载了我的应用程序

    adb -s localhost:4444 uninstall com.example.android.wearable.jumpingjack
    
  2. 添加了获取心率传感器的权限

    <uses-permission android:name="android.permission.BODY_SENSORS"/>
    
  3. 设置min和目标SDK版本以匹配手表

    android:minSdkVersion="20" android:targetSdkVersion="20"
    

再次启动应用程序。我收到了Sensor.TYPE_HEART_RATE的心率传感器,我开始收到它的读数。虽然他们远非好。有很多读数,但它们是相同的,仅限于这5个值:

heartRate onSensorChanged values = [0.0], accuracy = 0, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [53.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [54.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [55.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [77.0], accuracy = 1, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}

大部分时间我都得到相同的53.0值,这似乎不是我真实的心率。 77可能是那个。


6
2018-06-19 21:01





我在Moto 360上遇到了类似的问题。传感器总是返回0.0f值。

然后我等了两分钟,然后突然重视!= 0进来了。似乎这个传感器在显示任何东西之前需要“热身”。如果考虑到它以每分钟节拍大约每秒测量一次大小的事情,那就不是真的太惊人了。在一两分钟过后,它就不可靠了。每个应用程序都有自己的测量:如果另一个心跳应用程序也在运行(如Moto Body的事情)并不重要。

这也意味着你 必须 创建一个服务来收听传感器(以及一个活页夹,将传感器的值传递给您的活动或手机)。

看看我在github上分享的演示项目: https://github.com/upost/MyHeartbeat


2
2018-04-01 15:54





正如@Kent和@Murphy建议的那样,更新的SDK就是解决方案。在我的情况下,我需要放弃项目并从头开始创建新的,即使使用更新的SDK旧版也不起作用。


1
2017-10-23 05:07



你能接受这个答案吗?这样每个人都知道它已经解决了。 - Murphy
@Murphy完成了。谢谢。 - wonglik
什么版本的SDK可以使用? - Alexander K
我相信诀窍是从手表中卸载应用程序。这是一个示例命令:adb -s localhost:4444 uninstall com.example.android.wearable.jumpingjack - Alexander K
我也有:android:minSdkVersion =“20”android:targetSdkVersion =“20”手表的SDK版本是4.4W.2,在我的SDK Manager中它是SDK平台的rev.2,rev。 3为样本,rev。 4适用于Wear图像和转速。 1来源。 - Alexander K


所以,我来到这里,遇到同样的问题,简单的解决方案是使用adb从手表中删除应用程序:

adb -s localhost:4444 uninstall com.*packagename*

然后只需使用android studio,eclipse或者你原来使用的任何东西重新安装它。

感谢Alexander K提供此解决方案


0
2017-11-26 14:38