首页 > 解决方案 > OnSensorChanged() 未触发 Step 检测传感器

问题描述

我最近开始使用 android,我想编写自己的计步器应用程序来计算我已采取的步数。遗憾的是,没有调用 onSensorChanged() 方法。我确保我的手机有传感器,并且我还确保其他一切工作正常(注册一个监听器,创建一个 SensorManager 和一个传感器)并且一切似乎都工作正常。我已经 uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" 在 android 清单中添加了,因为另一篇文章说这是需要的。这是我的代码:


import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity implements SensorEventListener{

    Button btnReset;
    private SensorManager sensorManager;
    private Sensor stepSensor;
    private boolean isStepSensorAvailable;
    private TextView txtSteps, txtCheck;
    private int stepCounter;
    private List<Sensor> deviceSensors;  //bugfixing

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

        if(sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR) != null)
        {
            stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
            txtCheck.setText("Sensor was found, stepsensor is now " + stepSensor.getName());
            isStepSensorAvailable = true;
        }
        else
        {
            txtSteps.setText(getString(R.string.txt_step_sensor_not_available));
            isStepSensorAvailable = false;
        }


    }

    private void initialize() {
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        txtSteps = findViewById(R.id.txtSteps);
        txtCheck = findViewById(R.id.txtCheck);
        stepCounter = 0;
        btnReset = findViewById(R.id.btnReset);
        btnReset.setVisibility(View.INVISIBLE);
        txtSteps.setVisibility(View.INVISIBLE);

    }

    /**
     * Checking for available Sensors
     */

    @Override
    protected void onResume()
    {
        super.onResume();
        if(sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR) != null)
        {
            sensorManager.registerListener(this, stepSensor, sensorManager.SENSOR_DELAY_FASTEST);
            txtCheck.setText(txtCheck.getText() + System.getProperty("line.separator") + "listener registered!");
        }
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        if(sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR) != null)
        {
            sensorManager.unregisterListener(this, stepSensor);
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor == stepSensor)
        {
            txtCheck.setText(txtCheck.getText() + System.getProperty("line.separator") + "Sensorevent was triggered!");
            stepCounter = (int) (stepCounter + event.values[0]);
            txtSteps.setText(String.valueOf(stepCounter));
        }


    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}

提前感谢所有帮助。

标签: javaandroidandroid-sensors

解决方案


代替

if (event.sensor == stepSensor)

if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR)

推荐阅读