[英]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.