首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >步骤检测传感器未触发OnSensorChanged()

步骤检测传感器未触发OnSensorChanged()
EN

Stack Overflow用户
提问于 2021-05-04 08:19:42
回答 2查看 162关注 0票数 0

我最近开始使用android,我想编写我自己的计步器应用程序,它可以计算我走了多少步。遗憾的是,不知何故,onSensorChanged()方法没有被调用。我确保我的手机有传感器,我也确保其他一切正常工作(注册监听器,创建SensorManager和传感器),一切似乎都很好。我已经在安卓清单中添加了uses-permission android:name="android.permission.ACTIVITY_RECOGNITION",因为另一篇文章说这是需要的。下面是我的代码:

代码语言:javascript
运行
复制
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) {

    }
}

提前感谢大家的帮助。

EN

Stack Overflow用户

发布于 2021-11-09 07:42:35

您需要将以下内容添加到AndroidManifest.xml

代码语言:javascript
运行
复制
<uses-feature
   android:name="android.hardware.sensor.stepcounter"
   android:required="true"/>
  
<uses-feature
  android:name="android.hardware.sensor.stepdetector"
  android:required="true"/>

如果您使用的是Android 10或更高版本,还需要添加以下权限:

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67377284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档