简体   繁体   English

OnSensorChanged() 未触发 Step 检测传感器

[英]OnSensorChanged() is not triggering for the Step detect sensor

I recently started working with android and I wanted to program my own Pedometer app that counts how many steps I have taken.我最近开始使用 android,我想编写自己的计步器应用程序来计算我已采取的步数。 Sadly somehow the onSensorChanged() method isn't called.遗憾的是,没有调用 onSensorChanged() 方法。 I made sure my phone has the sensor and I also made sure that everything else is working fine (registering a listener, creating a SensorManager and a Sensor) and everything seems to be working fine.我确保我的手机有传感器,并且我还确保其他一切工作正常(注册一个监听器,创建一个 SensorManager 和一个传感器)并且一切似乎都工作正常。 I have als added uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" in the android manifest since another post stated this is needed.我还在 android 清单中添加了uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" ,因为另一篇文章指出这是必需的。 Here is my code:这是我的代码:


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

    }
}

Thanks in advance for all the help.提前感谢所有帮助。

Replace代替

if (event.sensor == stepSensor)

with

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

You need to add the following to your AndroidManifest.xml :您需要将以下内容添加到您的AndroidManifest.xml

<uses-feature
   android:name="android.hardware.sensor.stepcounter"
   android:required="true"/>
  
<uses-feature
  android:name="android.hardware.sensor.stepdetector"
  android:required="true"/>

If you use Android 10 or later, you also need to add the following permission:如果您使用Android 10或更高版本,还需要添加以下权限:

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

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

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