如何访问Android Wear中的心率传感器?

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


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

  • 从手表中卸载我的应用程序

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

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


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

    然后我等了两分钟,突然出现了值= 0的值。看起来这个传感器在显示任何东西之前需要“预热”。 如果考虑到它每秒钟大概每秒发生一次事件,并且该单位“每分钟跳动”,那么这并不令人惊讶。 在一分钟或两分钟过去之前,它不可靠。 每个应用程序都有自己的测量:如果另一个心跳应用程序也在运行,则无关紧要(如Moto Body的东西)。

    这也意味着您必须创建一个服务来聆听传感器(并使用活页夹将传感器的价值传递给您的活动或手机)。

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


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

    链接地址: http://www.djcxy.com/p/32013.html

    上一篇: How to access heart rate sensor in Android Wearable?

    下一篇: How to display HTML in TextView?