【问题标题】:Accelerometer sampling frequency changes during display timeout显示超时期间加速度计采样频率变化
【发布时间】:2016-09-15 22:05:15
【问题描述】:

对于我的硕士论文,我正在开发一个能够从三星 Galaxy S5 的 3 轴加速度计收集数据的 android 应用程序。因为我想跟踪人类活动,我需要大约 50Hz 的采样率。 我通过将采样率设置为 SENSOR_DELAY_GAME 来实现这一点,效果很好。为了检查采样率,我在手机显示屏上显示了包含加速度计数据的列表的长度。手机屏幕打开时一切正常,即使我在不​​同应用程序之间进行数据收集期间切换。这样做,我在 30 秒内收到了大约 1500 个值,这意味着采样率的准确性适合我的目的。

我现在的问题是,当屏幕超时时,加速度计采样率会降低到 5Hz,当屏幕开启时,加速度计采样率会再次变为 50Hz。有没有办法将加速度计采样率固定为 50 Hz?

PS:我更喜欢不将屏幕永久设置为开启以节省电池寿命的解决方案。

谢谢, 齐吉

编辑:我添加了加速度计所需的必要方法。没有使用现有的方法 onPause()、onStop() 和 onResume(),因为只有当停止按钮单击事件发生时,测量才会停止。

 public void initListeners(){
    mSensorManager.registerListener(this,
            mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_GAME);

}

public void onSensorChanged(SensorEvent event) {
    if (startFlag == true) {

        switch(event.sensor.getType()) {
            case Sensor.TYPE_ACCELEROMETER:
                // copy new accelerometer data into accel array
                // then calculate new orientation
                System.arraycopy(event.values, 0, accel, 0, 3);
                calculateAccMagOrientation();

                xText.setText("X: " + decimal.format(event.values[0]));
                yText.setText("Y: " + decimal.format(event.values[1]));
                zText.setText("Z: " + decimal.format(event.values[2]));


                xValue.add(event.values[0]);
                yValue.add(event.values[1]);
                zValue.add(event.values[2]);


                try {
                    xSize.setText(String.valueOf(xValue.size()));} catch(Exception e) {
                    Toast.makeText(getBaseContext(), "Fehler bei Add to List", Toast.LENGTH_SHORT).show();
                }
                break;

        }

}
}

【问题讨论】:

  • 可以分享代码吗?

标签: accelerometer android-sensors


【解决方案1】:

我现在的问题是,当屏幕超时时, 加速度计采样率降低到 5Hz 并变化到 50Hz 再次打开屏幕时。有没有办法修复加速度计 采样率达到 50 Hz?

PS:我更喜欢不将屏幕设置为 ON 的解决方案 永久保存电池寿命。

这就是重点。当屏幕关闭时,应使用较少的电源。用户还期望功耗更低。以较低速率采样是任何体面的操作系统处理功率限制情况的众多方法之一。

因此,如果有任何支持的方式在手机屏幕关闭时增加采样率,我会感到非常惊讶。

【讨论】:

  • 但我认为您无法比较 50Hz 采样率和永久屏幕开启的能耗。如果有机会将屏幕永久打开,为什么不能将采样率设置为恒定值...
  • 我在另一个线程中发现了这种方法。也许有人可以帮助我? “为什么不手动执行。设置线程每 33 毫秒(30 赫兹)唤醒一次,并在这些时间获取加速度计读数。”
【解决方案2】:

您可能希望将读取加速度计的代码作为服务而不是在应用程序中运行。 AleAdam 在此类似的答案中对此进行了很好的描述:Keep UI Thread running when screen is off

在其他线程答案中提到了几个教程。

【讨论】:

    【解决方案3】:

    您可能想要的是保持 CPU 以相同的速度运行,尝试使用 Wakelock:

    PowerManager powerManager = null;
    PowerManager.WakeLock wakeLock = null;    
    
    powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    "MyWakelockTag");
    wakeLock.acquire();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2011-10-18
      • 2018-07-05
      相关资源
      最近更新 更多