Java android studio传感器心率应用程序
我创建了一个简单的应用程序,学习如何使用一个按钮和标签的传感器心跳这里是我的代码:Java android studio传感器心率应用程序,java,android,sensors,heartbeat,Java,Android,Sensors,Heartbeat,我创建了一个简单的应用程序,学习如何使用一个按钮和标签的传感器心跳这里是我的代码: public class MainActivity extends AppCompatActivity implements SensorEventListener { Button show; TextView showHeartRate; SensorManager sensorMgr; Sensor heartRate; String heartRateValue;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
Button show;
TextView showHeartRate;
SensorManager sensorMgr;
Sensor heartRate;
String heartRateValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show = (Button) findViewById(R.id.button);
show.setOnClickListener(displayHeartRate);
showHeartRate = (TextView) findViewById(R.id.showHeartRate);
sensorMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
heartRate = sensorMgr.getDefaultSensor(Sensor.TYPE_HEART_RATE);
}
View.OnClickListener displayHeartRate = new View.OnClickListener() {
@Override
public void onClick(View view) {
showHeartRate.setText(heartRateValue);
}
};
@Override
protected void onResume() {
super.onResume();
sensorMgr.registerListener(this,heartRate,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
sensorMgr.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.sensor.getType());
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
我在清单上加上:
<uses-permission android:name="android.permission.BODY_SENSORS"/>
问题是没有调用onSensorChanged()。
我在这里查看了很多解决方案,但没有找到任何解决方案。首先,如果您尝试使用的是心率传感器,为什么您希望它请求您的相机使用权限 其次,我认为当您单击“显示心率”时,您还没有传感器的任何数据(
heartRateValue
为空),当数据最终出现时,您并不真正更新UI,您只更新您的状态。我建议您在每次传感器更改时更新UI状态,例如:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.sensor.getType());
showHeartRate.setText(heartRateValue);
}
或者,您可以避免代码重复(即使只是一行),创建一个setter并从click handler和sensor handler调用它:
private void setHeartrate(String rate) {
showHeartRate.setText(rate);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.sensor.getType());
setHeartrate(heartRateValue);
}
View.OnClickListener displayHeartRate = new View.OnClickListener() {
@Override
public void onClick(View view) {
setHeartrate(heartRateValue);
}
};
第三,您没有使用来自传感器的数据,请看,数据来自
值
数组,您只是试图显示传感器类型,为什么?试试这个:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.values.length > 0 ? sensorEvent.values[0] : 0.0f);
showHeartRate.setText(heartRateValue);
}
首先,如果您正试图使用它的心率传感器,为什么您希望它请求您的相机使用权限 其次,我认为当您单击“显示心率”时,您还没有传感器的任何数据(
heartRateValue
为空),当数据最终出现时,您并不真正更新UI,您只更新您的状态。我建议您在每次传感器更改时更新UI状态,例如:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.sensor.getType());
showHeartRate.setText(heartRateValue);
}
或者,您可以避免代码重复(即使只是一行),创建一个setter并从click handler和sensor handler调用它:
private void setHeartrate(String rate) {
showHeartRate.setText(rate);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.sensor.getType());
setHeartrate(heartRateValue);
}
View.OnClickListener displayHeartRate = new View.OnClickListener() {
@Override
public void onClick(View view) {
setHeartrate(heartRateValue);
}
};
第三,您没有使用来自传感器的数据,请看,数据来自
值
数组,您只是试图显示传感器类型,为什么?试试这个:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
heartRateValue = Integer.toString(sensorEvent.values.length > 0 ? sensorEvent.values[0] : 0.0f);
showHeartRate.setText(heartRateValue);
}
我等了2分钟,用手指按住传感器,它会告诉我你的onSensorChanged打过电话吗?您的心率是否为非空?你能在调试器中检查吗?在调试器上,它显示“heartRateValue”为Null我是说传感器本身,而不是值我的方法onSensorChanged现在没有调用我检查这个…我需要调用她onClick方法?我等了2分钟,用手指按住传感器,它显示Null你的onSensorChanged是否调用过?您的心率是否为非空?你能在调试器中检查吗?在调试器上,它显示“heartRateValue”为空我是指传感器本身,而不是值我的方法onSensorChanged现在没有被调用我检查这个…我需要调用她onClick方法?