SensorEventListener 似乎没有运行。如何获取传感器值?



我正在测试安卓磨损传感器以供将来实现。我的目标是获取心率值,并将其显示在我的主活动中。所以我实现了一个SensorHelper class

import static android.content.Context.SENSOR_SERVICE;
public class SensorHelper implements SensorEventListener {
private final SensorManager mSensorManager;
private final Sensor mHeartRate;
public String sensorValue = "deafult";
public SensorHelper() {
Log.i("SENSOR", "SENSOR CONSTRUCTOR");
mSensorManager = (SensorManager) MyApplication.getAppContext().getSystemService(SENSOR_SERVICE);
mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
String msg = "" + (int)event.values[0];
this.sensorValue = msg;
Log.d("SENSOR", msg);
}
else
this.sensorValue = "unable to read value";
Log.d("SENSOR", "Unknown sensor type");
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}

据我所知,每次心率变化时都应该调用onSensorChanged函数。在此函数中,我正在更新sensorValue变量。

MainActivity.class中,我创建了一个按钮,通过将Sensorhelper.sensorValue的值分配给它来刷新TextView

public class MainActivity extends WearableActivity {
private Button refreshButton;
private TextView mTextView;
SensorHelper sensorHelper;
private View.OnClickListener refreshListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("refresh");
mTextView.setText(sensorHelper.sensorValue);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorHelper = new SensorHelper();
mTextView = (TextView) findViewById(R.id.textView);
refreshButton = (Button) findViewById(R.id.button_refresh);
refreshButton.setOnClickListener(refreshListener);
// Enables Always-on
setAmbientEnabled();
}
} 

我添加了BODY_SENSORS权限。问题是,TextView始终保持"默认"状态,并且按钮不会刷新值。我想我从SensorHelper实现中遗漏了一些东西。

谢谢

您错过了注册侦听器以获取新值的调用。

在构造函数SensorHelper中添加mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_NORMAL);

public SensorHelper() {
Log.i("SENSOR", "SENSOR CONSTRUCTOR");
mSensorManager = (SensorManager) MyApplication.getAppContext().getSystemService(SENSOR_SERVICE);
mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_NORMAL);
}

请记住在不再需要传感器时呼叫mSensorManager.unregisterListener(this);

查看传感器管理器文档以获取更多详细信息。

最新更新