【问题标题】:How to access heart rate sensor in Android Wearable?如何在 Android Wearable 中访问心率传感器?
【发布时间】:2014-10-21 14:32:55
【问题描述】:

我在访问 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.

【问题讨论】:

  • 您是否尝试过更新 SDK? link
  • 我同意 Kent 的观点,确保您的 SDK 是最新的,有人修复了类似的问题:stackoverflow.com/questions/25820771/…
  • @Kent 项目是否以某种方式与 SDK 相关联?因为我有最新的 SDK,但它不起作用。但是当我创建新项目时它开始工作。
  • 我遇到了同样的问题。我在短时间内得到了一些值,然后它在一分钟左右返回相同的值,然后给我几个不同的值,然后它再次停止。像这样的接缝是 Moto 360 的普遍问题。

标签: android wear-os moto-360


【解决方案1】:

在我完成以下操作后开始为我工作:

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

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

    <uses-permission android:name="android.permission.BODY_SENSORS"/>
    
  3. 设置最小和目标 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 可能是那个。

【讨论】:

    【解决方案2】:

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

    然后我等了两分钟,突然 values!=0 进来了。看来这个传感器需要“预热”才能显示任何内容。如果您考虑到它以“每分钟节拍数”为单位测量大约每秒发生一次的事情,这并不令人惊讶。在一两分钟过去之前,它是不可靠的。每个应用程序都有自己的衡量标准:另一个心跳应用程序是否也在运行(比如 Moto Body 的事情)并不重要。

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

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

    【讨论】:

      【解决方案3】:

      正如@Kent 和@Murphy 所建议的,更新的SDK 是解决方案。就我而言,我需要删除项目并从头开始创建新项目,因为即使使用更新的 SDK 旧项目也无法正常工作。

      【讨论】:

      • 你能接受这个答案吗?这样大家就知道问题解决了。
      • 我相信诀窍是从手表上卸载应用程序。这是一个示例命令: adb -s localhost:4444 uninstall com.example.android.wearable.jumpingjack
      • 我也有: android:minSdkVersion="20" android:targetSdkVersion="20" 手表的 SDK 版本是 4.4W.2,在我的 SDK 管理器中它是 SDK 平台的 rev.2 , 转。 3 样品,转。 4 磨损图像和转速。 1 表示来源。
      • 通过这些更改,我现在有了心率传感器并能够从中读取数据。
      【解决方案4】:

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

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

      然后只需使用 android studio、eclipse 或您最初使用的任何工具重新安装它。

      感谢 Alexander K 提供的解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多