2

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

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

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

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

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

非常感谢!

4

3 回答 3

0

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

就像是:

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
    }
于 2011-08-16T00:07:26.700 回答
0

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

你可以在这里下载项目并获得一些解释。

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

于 2011-11-22T17:58:35.347 回答
0

通过registerListener如下设置采样周期来使用:

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

资源

注意事项:该samplingPeriodUs论点只是对系统的提示。在使用它之前测试它。

于 2015-08-27T11:17:07.817 回答