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);

アプリケーションを開発していました。最初は期待どおりに変化していましたが、約 1 時間後、センサーからの値がフリーズし、何があってもまったく同じままでした。

私は2 つのことを疑っています。バッテリー レベルデータ レートの更新です。

バッテリーが許容レベルを下回ったのかもしれません(動作を停止したときは約25%でした)...それは奇妙ですが、大きな驚きではありません.

第二に、値が凍結する少し前に、ある時点で SENSOR_DELAY_NORMAL ) を SENSOR_DELAY_UI )SensorManager.変更したSensorManager.ことを覚えています。おそらくそれは偶然です。SensorManager.SENSOR_DELAY_UI は、SensorManager.SENSOR_DELAY_NORMAL よりもデータ レートの更新が高速であり、新しい値を取得するたびにビットマップを変更していたためです。バッファがいっぱいで空にならなかったのかもしれません...多分

とにかく、この件に関するニュースがあれば、この投稿を更新します。

于 2015-09-18T17:37:33.730 に答える