如何阅读Android Wear的心率

时间:2016-04-21 05:24:28

标签: java android

我需要在那一刻读取用户的心率。我尝试在Wear项目的主要活动中使用此代码。

public class MainActivity extends WearableActivity implements SensorEventListener {

    private static final String TAG = "MainActivity";
    private TextView mTextViewHeart;
    SensorManager mSensorManager;
    Sensor mHeartRateSensor;
    SensorEventListener sensorEventListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextViewHeart = (TextView) findViewById(R.id.heart);
        mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
        mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
        mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
        Log.i(TAG, "LISTENER REGISTERED.");
        mTextViewHeart.setText("Something here");


        mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);
    }


    public void onResume(){
        super.onResume();
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        Log.d(TAG, "onAccuracyChanged - accuracy: " + accuracy);
    }

    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
            String msg = "" + (int)event.values[0];
            mTextViewHeart.setText(msg);
            Log.d(TAG, msg);
        }
        else
            Log.d(TAG, "Unknown sensor type");
    }

}

这段代码根本不起作用,给我一个错误说:

E/SensorManager﹕ sensor or listener is null

如果除了心率传感器之外还使用其他任何东西,它都能正常工作。

我正在使用:

  • LG G4,android API等级23
  • LG Urbane手表(我知道它有一个心率传感器),带有Wear API等级23

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

我在this question中遇到了同样的问题。我们有相同的磨损装置,所以我几乎可以肯定你错过了穿着AndroidManifest.xml

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

此外,您应该转到设置中的权限,以检查是否已启用该权限。

您可以在目前正在使用的GitHub上查看我的项目。

答案 1 :(得分:3)

实际上,您正在实现SensorEventListener接口,并在不初始化的情况下创建了SensorEventListener的实例。

初始化传感器:

SensorEventListener sensorEventListener = new SensorEventListener(){ ... };

或删除它并使用“this”:

mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);

将其更改为:

mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);

答案 2 :(得分:1)

别忘了,从SDK 23开始,您必须分别在佩戴设备和手机上申请权限。 Wear应用程序不再继承手机应用程序的权限。

https://developer.android.com/training/articles/wear-permissions.html

答案 3 :(得分:0)

权限事情现在已经让我失意了几次。虽然我还没有实现代码来请求使用传感器的权限,但一个简单的解决方法是进入可穿戴设备,然后选择权限并找到您的应用程序。当您单击应用程序时,您会注意到传感器已禁用,因此只需单击它即可启用它们。应该工作吧!