简体   繁体   English

Android Studio Sensor HEART Rate应用程式

[英]android studio sensor HEART Rate app

I created a simple app to learn how to use sensor heart beat with one button and label here is my code: 我创建了一个简单的应用程序,以学习如何通过一个按钮使用传感器心跳,这里的代码是我的代码:

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) {


    }

I add to the manifest: 我添加到清单:

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

the problem is that the onSensorChanged() is not called. 问题是没有调用onSensorChanged()。 i check a lot of solutions here but i did not find anything 我在这里检查了很多解决方案,但没有找到任何东西

First, why would you expect it to ask permissions to use your camera if its heartrate sensor that you are trying to use? 首先,如果您要尝试使用其心率传感器,为什么会期望它要求使用相机的权限?

Second, I think by the time you click 'display heartrate', you just don't have any data from the sensor yet ( heartRateValue is empty), and when data finally comes you don't really update UI, you only update your state. 其次,我认为当您单击“显示心率”时,您还没有来自传感器的任何数据( heartRateValue为空),并且当数据最终出现时,您并没有真正更新UI,您只更新了状态。 What I suggest is to update your UI state on every sensor change, for example: 我建议在每次传感器更改时更新您的UI状态,例如:

    @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            heartRateValue = Integer.toString(sensorEvent.sensor.getType());
            showHeartRate.setText(heartRateValue);
        }

or you can avoid code duplication (even thought its only one line), create a setter and and call it from both click handler and sensor handler: 或者您可以避免代码重复(即使只考虑一行),创建一个setter并从单击处理程序和传感器处理程序中调用它:

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);
    }
};

Third, you are not using data from your sensor, look at SensorEvent , data comes in values array and you are only trying to displat sensor type, why? 第三,您没有使用传感器中的数据, 而是查看SensorEvent ,数据出现在values数组中,而您只是尝试显示传感器类型,为什么? Try this: 尝试这个:

@Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            heartRateValue = Integer.toString(sensorEvent.values.length > 0 ? sensorEvent.values[0] : 0.0f);
            showHeartRate.setText(heartRateValue);
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM