1

Sensor.Type_Light または Light Sensor を使用して event.values[0] の変化を検出しようとしています。

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType()== Sensor.TYPE_LIGHT) {
        debugView = (TextView)findViewById(R.id.lightValue);
        debugView.setText("Detecting...." +event.values[0]);
    }

ご覧のとおり、値は TextView に表示されます。また、event.values[0] が 0 の場合、光がなく、光が増加すると値も増加することがわかっています。ここで私の質問は次のとおりです。この event.values[0] を使用して光の大幅な変化を検出するにはどうすればよいですか。つまり、センサーを適切な光 (event.values[0] >15) でアクティブにすると、トリガーできるはずです。ライトがオフになったときのイベント (event.values[0] < 3) とその逆。

前もって感謝します

onSensorChanged で次のことを試しましたが、何も機能しないようです。

if(event.values[0] >= 0 && event.values[0] <5) {
    // No Light
    if(event.values[0] > 10) {
        callForHelp();
    }
}
else {
    if(event.values[0] > 15) {
        // Light On
        if(event.values[0] < 5) {
            callForHelp();
        }
    }
}
4

3 に答える 3

0

あなたの問題は、重大な変化があった場合にのみ反応したいということです。

値「3」から値「0」への変更は重要な変更ではありませんが、検出されるため、onChanged メソッドの値を確認するだけのソリューションは機能しません。

必要なのは、前のライト イベントの値を記憶する変数だけです。

(イベント コールバック内ではなく) アクティビティ スコープで変数を宣言し、「previousLightValue」のような名前を付けます。

次に、onSensorChanged メソッドで event.values[0] を previousLightValue 変数と比較し、変更が決定した特定のしきい値を超えている場合にのみ「反応」することができます。

また、前回の測定以降に値が上下したかどうかを確認して、光が明るくなったか暗くなったかを知ることもできます。

比較に使用する前に、「previousLightValue」変数を初期化する必要があることに注意してください。そのため、onSensorChanged イベントの最初の発生を検出し、チェックを行わずに値のみを「previousLightValue」に格納します。それ以降は、準備万端です。

于 2015-04-14T06:52:46.617 に答える