0

重现步骤

  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。

对我来说,这看起来像是一个错误,因为每次用户摇晃或摆动设备时,10 秒内的坏数据似乎完全违反直觉。

设备详情

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

我的问题

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

1 回答 1

1

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

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

  • SENSOR_DELAY_GAME
  • SENSOR_DELAY_FASTEST
  • 54999或更低

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

于 2015-11-22T05:49:53.280 回答