Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android studio传感器心率应用程序_Java_Android_Sensors_Heartbeat - Fatal编程技术网

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方法?