java - 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) {
}
}
提前感谢所有帮助。
解决方案
代替
if (event.sensor == stepSensor)
和
if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR)
推荐阅读
- javascript - 使用reduce函数汇总/计数数组
- perl - 将结果数据附加到 Parallel::ForkManager Perl 中的标量变量
- python - Pygame 程序在处理元组时崩溃
- php - 为什么 PHP cURL 请求可以在 localhost 上工作,但不能在服务器上工作(禁止 403)?
- jhipster - 在创建项目时全局保留一些 JHipster 设置以节省时间
- uniqueidentifier - ISBN/ISSN + Epubcfi 是否足以从外部链接到 Epub 段落?
- css - 在使用图像作为输入文件的输入类型文件中显示图像文件名
- java - Java中类之间的事件处理
- javascript - 有没有办法在 GTM 的循环中使用查找列表?
- vue.js - 设置属性并从 Vue 组件中检索 HTML 作为字符串