0

方向センサーからイベントを 1 つだけ取得しようとしています。

私のコードは次のとおりです。

@Override
public void onSensorChanged(SensorEvent event) {
Log(event);
unregisterSensor(...);
}

次に、1000msごとにスレッドで次のことを行います。

registerSensor();
Thread.sleep(2000);

問題は、メソッドの最後にセンサーの登録を解除すると(私が行ったように)、次回(センサーを再登録するとき)、以前にキャッチされた同じ値のイベントがログに記録されることです(電話の移動中)。 . onSensorChanged に (カウンターを使用して) 2 回実行する機能を与えると、正しい値が検出され、この値が 2 回ログに記録されます。

一度しか呼び出されないメソッドの問題は何ですか?

4

2 に答える 2

1

あなたのコードによると、引数として取得するのではなく、onSensorChanged()ログに記録します。myeventevent

それに、LocationManager登録と登録解除の煩わしさの代わりに、新しいイベントを 1 秒または 2 秒ごとに送信するように に指示してみませんか? これは、メソッドのminTimeパラメーターを使用して行うことができます。LocationManager#requestLocationUpdates()

于 2012-10-12T17:13:03.127 に答える
0

センサーがイベントをキャッシュしていることは知りませんでしたが、ネットワーク プロバイダーの Locationlistener で同様の動作が見られたので、驚くことでもありません。

そうは言っても、 をonSensorChanged()数回呼び出して、最初の (キャッシュされた) ものを削除し、次のものを平均化 (またはローパス フィルターを使用) することをお勧めします。精度が向上し、さらにいくつかのイベントが発生してもバッテリーが消耗することはありません:-)

幸運を。

于 2012-10-13T00:21:02.460 に答える