4

複数のセンサーから同時にデータを取得できるアプリケーションを構築しようとしています。そこにたどり着くまでの道のりはまだわからないので、構造化されたレイアウト用に SensorObject クラスを実装することから始めました。

このセンサー オブジェクトは、通常の onaccuracychanged および onsensorchanged メソッドと共に SensorEventListener を実装します。このクラスは継承されているため、ここでは両方のメソッドを空のままにします。また、次のように OnResume メソッドを実装しました。

    public void OnResume() {
    sensorManager.registerListener(this, sensor,
            SensorManager.SENSOR_DELAY_NORMAL);
}

続いて、センサー オブジェクトを拡張する加速度計オブジェクトを実装しました。実質的に、それは onSensor Changed で機能します。

私の主な質問はここにあります

    AccelerometerObject ao =  new AccelerometerObject(Sensor.TYPE_ACCELEROMETER, this);
    ao.OnResume();

    txtAccelerometerData = (TextView) findViewById(R.id.txtAccelerometerData);
    txtAccelerometerData.setText(ao.toString());

センサー データにすぐにアクセスせず、順次処理を進めているのはなぜですか? onresume メソッドにアクセスしていないため、オブジェクトにはまだ値がありません。別のスレッドを使用する必要がありますか? 効率はそれほど重要ではありません。必要なのは、実験用の有効なデータだけです。

2) 上記のアプローチを使用して複数の同時センサーを実装することは可能ですか?

どんな助けでも大歓迎です。

以下は、要求された AccelerometerObject です。

public class AccelerometerObject extends SensorObject {

public float[] values;

public AccelerometerObject(int sensorType, Context _Context) {
    super(sensorType, _Context);
}   

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }

@Override
public void onSensorChanged(SensorEvent event) {
    AccelerometerValues = event.values;
    onPause();
}


@Override
public String toString() {
    if (values != null) {
        return "X is " + values[0]
                + ", Y is " + values[1]
                + " and Z is "
                + values[2]);
    } else
        return "N/A";
}

}

4

1 に答える 1

2

ここに eclipse プロジェクトをアップロードしました: http://cyrixmorten.net/CA-Project.zip

このプロジェクトは、Context Awareness のコースのデータを収集するために使用されています。

からセンサー値を取得する方法を示します

  • 加速度計
  • ジャイロスコープ
  • オリエンテーション
  • GPS

実装では、各センサーにサービスを実装しました。これはおそらく不必要に複雑ですが、焦点が合っていないときでもバックグラウンドでデータ収集を継続する必要がありました.

編集:

ところで、すべての *ResultReceiver オブジェクトは、Activity とそれらが表す Service の間の接着剤として機能するだけです。*ResultReceiver オブジェクトはセンサー イベントを受け取り、それらをカスタム インターフェイスに変換します。このインターフェイスは、MainActivity によって使用されます。

その部分が混乱を招く可能性があると想像することはできますが、インターフェイスを介して正確な値を取得できるときに、アクティビティで多くの異なるバンドルと文字列をいじるのは好きではありません.タイプミスに対する個人的な保護のための設計上の選択にすぎません.

于 2014-04-01T14:22:54.120 に答える