3

近接センサーの値を追跡するアプリケーションを作成しようとしているときに問題が発生しました。アプリケーションの目的は、定期的な間隔 (たとえば 30 秒) で瞬間的な近接値を記録することです。

API ドキュメントに従って、標準リスナーが作成され、そのタイプのセンサーにアタッチされます。ただし、センサーを手で覆っている場合でも、値は常に「5.0」(5cm、センサーの最大値) として報告されます。

ただし、別のアプリケーション (近接センサーの値も監視する) を起動すると、両方のアプリケーションが近接を正しく報告し始めます。他のアプリケーション ( Android Sensor Box )を閉じると、アプリケーションは常に 5.0 を報告するだけに戻ります。

アプリケーションをデバッグし、「onSensorChanged」イベントにブレークポイントを設定して、 onSensorChangedメソッドに渡されるSensorEventオブジェクトを再確認しました。常に 5.0です。

編集 #2: 近接センサーに限定されているようには見えません。ジャイロスコープ センサーは同じように動作しますが、加速度計と磁力計は正確で最新の値を示しているように見えます。4 つすべてが同じ方法で参照およびアクセスされます。

何か案は?

4

1 に答える 1

4

さて、私は再び自分自身の質問に答えることになります。

アプリケーションが構造化された方法 (これには正当な理由がありました) は、リスナーが登録され、センサーから最初に報告された値が、新しい読み取り値を継続的に受け入れることなく読み取り値として取得されることを意味していました。これは、加速度センサーの読み取りでは問題なく機能しますが、一部のセンサーは、この最初の読み取りで DEFAULT 値を報告することが判明しました (近接センサーの場合は「FAR」、ジャイロスコープの場合は 0.0/0.0/0.0 など)。正しい値が報告され始めたのは、2 ~ 3 回の「onSensorChanged」イベントの後でした。

これは、省電力と、特定のセンサーがデータを報告する準備が整うまでに時間がかかることに関係していると思います。間違った値で sensorChanged イベントを発生させることが許容される慣行である理由はわかりませんが、それが起こっているようです。

それにもかかわらず、私にとっての修正は、最初の 2 ~ 3 の読み取り値を破棄し (とにかくミリ秒間隔で受信されます)、4 つ目の読み取り値をより信頼性の高い読み取り値として使用することでした。

于 2013-05-24T14:20:35.350 に答える