设备震动后,传感器会报告错误数据

时间:2015-11-22 05:49:53

标签: android android-sensors galaxy s5

重现的步骤

  1. 在正常采样周期内注册重力传感器的监听器。使用您自己的代码(下面的基本示例)或只安装My Sensors,确保通过菜单将传感器更新速率设置为 Normal

    Sensor gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
    sensorManager.registerListener(callback, gravitySensor, SENSOR_DELAY_NORMAL);
    
  2. 观察传感器输出。当设备竖直时,Y轴(event.values[1])应报告~9.7。

  3. 给设备一次或两次坚硬,快速的摇动/摆动。然后再把它竖起来。
  4. 执行此操作后,请查看传感器输出:
    • 前2秒,Y轴值从9.7过渡到-9.7。
    • 在接下来的6秒内,Y轴值保持倒转(-9.7)。
    • 在接下来的2秒内,Y轴值将转换回9.7。
  5. 对我来说这看起来像个错误,因为每次用户摇晃或摆动设备时,数据都会持续10秒,这似乎完全违反直觉。

    设备详细信息

    • 使用Samsung Galaxy S5(G900I)
    • 运行Android 5.0(升级到Android 6后也发生)
    • 受影响的传感器
      • 重力传感器(三星电子)(第3版)
      • MPL旋转矢量(Invensense)(版本1)
      • MPL游戏旋转矢量(Invensense)(版本1)
      • 方向传感器(三星电子)(第1版)

    我的问题

    1. 这个设备是正常的行为吗? (它是否发生在你的 Galaxy S5上?)
    2. 这是Android设备的正常行为吗? (它是否发生在具有上述传感器类型的您的 Android设备上?)
    3. 有没有办法防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

部分解决方法:使用快速采样率

当我将传感器采样率设置为以下任何一项时,问题不再出现:

  • SENSOR_DELAY_GAME
  • SENSOR_DELAY_FASTEST
  • 54999或更低

不幸的是,如果传感器已被其他应用程序监听,则使用其他应用程序请求的采样率,而不是我的应用程序请求的值。因此,如果另一个应用已经使用SENSOR_DELAY_NORMAL监听传感器,我的应用只会以该速率获取传感器更新,让我的应用完全无法解决该错误。