【问题标题】:How to get x, y, z values from Android Accelerometer sensor on a regular frequency, for instance per 20ms, 40 ms or 60 ms如何以常规频率(例如每 20 毫秒、40 毫秒或 60 毫秒)从 Android 加速度计传感器获取 x、y、z 值
【发布时间】:2011-08-09 08:39:31
【问题描述】:

我在做一个Android项目,遇到了以下情况:

  1. 现在我们需要常规频率的加速度计值,例如 20ms、40ms 或 60ms

  2. 现在我们是 SENSOR_DELAY_GAME,但我们发现不同的设备对此参数有不同的间隔。例如,G2 使用 40ms,G7 使用 60ms,Nexus S 使用 20ms。

  3. 我尝试设置定时器或使用thread.sleep,但由于Java的GC问题,他们无法让系统以固定频率获取值。

这很烦人,如果有人知道在 Android SDK 中是否有适当的方法可以让我以常规频率获取加速度计值,那将非常有帮助!

非常感谢!

【问题讨论】:

    标签: android garbage-collection accelerometer frequency android-sensors


    【解决方案1】:

    我通过简单地丢弃比我想要的更早的值来做到这一点。从电池消耗的角度来看并不理想,因为我需要让传感器比我需要的更频繁地为我供电,但至少我可以控制它们定期进入。

    类似:

    static final int ACCEL_SENSOR_DELAY = 100;  // the number of milisecs to wait before accepting another reading from accelerometer sensor
    long lastAccelSensorChange = 0; // the last time an accelerometer reading was processed
    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
    
    
        if (sensorEvent.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)  return;
    
        long now = System.currentTimeMillis();
        if (now-ACCEL_SENSOR_DELAY > lastAccelSensorChange) {
            lastAccelSensorChange = now;
            mCompassValues = event.values.clone();
            //... do your stuff
        }
    

    【讨论】:

      【解决方案2】:

      我已经构建了一个代码,可以让您在任何设备上获得准确的频率。

      您可以下载here该项目并获得一些解释。

      在代码中,您可以尝试不同的费率。例如,我的 Galaxy S2 上的正常模式是 5Hz。

      【讨论】:

        【解决方案3】:

        使用registerListener,设置采样周期如下:

        boolean registerListener (SensorEventListener listener, Sensor sensor, int samplingPeriodUs)
        

        Source

        注意事项samplingPeriodUs 参数只是对系统的提示。使用前先测试一下。

        【讨论】:

          猜你喜欢
          • 2013-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-08
          • 1970-01-01
          • 1970-01-01
          • 2012-06-29
          相关资源
          最近更新 更多