首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sensorManager.registerListener()中调用onResume()?

如何在sensorManager.registerListener()中调用onResume()?
EN

Stack Overflow用户
提问于 2019-02-06 17:02:43
回答 1查看 2.2K关注 0票数 1

我正在用一个应用程序进行测试,该应用程序可以对加速度计数据进行采样并进行处理。

第一次安装应用程序时,onSensorChanged()以1/2的速度调用,其速率在samplePeriodUs中指定

我尝试在onPause()中注销并注册onPause侦听器。一种看起来可行的方法是在onResume()中输入1/2的样本率。这不是正确的做事方式吗?

代码语言:javascript
复制
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(this, accelerometer, 20000); }

 public void onResume() {
    super.onResume();
    sensorManager.unregisterListener(this);
    sensorManager.registerListener(this, accelerometer, 10000);
}

public void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this); }

我期望sensorManager.registerListener(这个,加速度计,20000);用于onResume()和onCreate()

EN

回答 1

Stack Overflow用户

发布于 2019-02-06 17:29:39

这种行为确实很奇怪。下面是我在机器学习应用程序中管理传感器的方法。

代码语言:javascript
复制
private SensorManager mSensorManager;
private Sensor mAccelerometer, mGyroscope, mMagnetometer;

@Override
protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(mSensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    mSensorManager.registerListener(mSensorEventListener, mGyroscope, SensorManager.SENSOR_DELAY_NORMAL);
    mSensorManager.registerListener(mSensorEventListener, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onPause() {
    super.onPause();
    mSensorManager.unregisterListener(mSensorEventListener);
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
    mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
    mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

    mSensorManager.registerListener(mSensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

}

/**
* Listener that handles sensor events
*/
private final SensorEventListener mSensorEventListener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        //if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
            // Do work
        } else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            // Do work
        } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
            // Do work
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
    }
}; 

完整的项目源可以在https://github.com/Wickapps/Activity-Tracker找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54558882

复制
相关文章

相似问题

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