0

我正在尝试在 Moto 360 上以最高采样率读取陀螺仪和 linear_acclerometer 数据。我将按下手持设备上的一个按钮,它将在手表上注册传感器并开始记录所有传感器数据,当我按下另一个按钮时,手表将取消注册这些传感器并停止记录。

但是,传感器值有时会变为恒定值。我发现如果我重新启动手表,传感器将开始工作并再次生成有意义的传感器值。

有没有人遇到过类似的问题或对为什么会发生这种情况有一些想法?

private void startSensorListeners() {
        Log.d(TAG, "startSensorListeners");
        isCollecting = true;
        //Register the motion Sensor Listener
        mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SENSOR_DELAY);
        mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SENSOR_DELAY);
}

public  void stopSensorListeners() {
         isCollecting = false;
          mSensorManager.unregisterListener(this);
    }

 public final void onSensorChanged(SensorEvent event) {
       if(!isCollecting){
           mSensorManager.unregisterListener(this, event.sensor);
           return ;
        }
    // Save sensordata into local files, I also output the values[] in event on the logcat to monitor the sensor values in the realtime.
    saveData(event);
    }

谢谢

4

1 回答 1

1

我对此没有实际的答案。我只是分享我的问题,因为我觉得它们非常相似。该问题发生在Moto 360上,并且未在其他设备上进行测试。

我使用磁性传感器

mMagneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

我将我的 Fragment 注册为新值的侦听器。

mSensorManager.registerListener(this, mMagneticSensor, SensorManager.SENSOR_DELAY_NORMAL);

我正在开发一个应用程序。一开始,它们按预期变化,但大约一个小时后,传感器的值就冻结了,无论如何都保持不变。

我怀疑两件事:电池电量数据速率更新

也许电池下降到某个可接受的水平以下(停止工作时约为 25%)......这会很奇怪,但也不会让人大吃一惊。

其次,我记得在某个时间点将 SENSOR_DELAY_NORMAL ) 更改为 SENSOR_DELAY_UI ),SensorManager.SensorManager.冻结之前不久。也许这是一个巧合。SensorManager.SENSOR_DELAY_UI 是比 SensorManager.SENSOR_DELAY_NORMAL 更快的数据速率更新,因为我每次获得新值时都在修改位图。也许缓冲区已满且未清空...也许

无论如何,如果我有关于这个主题的一些消息,我会更新这篇文章。

于 2015-09-18T17:37:33.730 回答