1

ユーザーが複数のセンサー値を同時に取得してリストビューに表示できる不思議なアプリに取り組んでいます。しかし、残念なことに、加速度計の値をフェッチすることはできませんでした。ジャイロスコープ、磁場、方向など、利用可能なすべてのセンサーを登録するために複数の方法を試しました。加速度計が優先され、毎回起動されるため、値を取得するものはありません。複数のセンサーを同時に登録し、それらからデータを取得して UI を更新する方法はありますか。

mAccelerometerListener = new SensorEventListener() {
        @Override
        public void onAccuracyChanged(Sensor arg0, int arg1) {
        }

        @Override
        public void onSensorChanged(SensorEvent event) {
            Sensor sensor = event.sensor;
            //Update UI
            } 
        }
    };

    mGyroscopeListener = new SensorEventListener() {

        @Override
        public void onSensorChanged(SensorEvent event) {
            // TODO Auto-generated method stub
            if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
                //Update Ui

            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }
    };

    mMagnetometerListener = new SensorEventListener() {

        @Override
        public void onSensorChanged(SensorEvent event) {
            // TODO Auto-generated method stub
            if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
                //Update UI
                }

            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }
    };

if (Config.isSensorPresent(ACCELERATION)) {
        //sendMessageToService(Sensor.TYPE_ACCELEROMETER);
        mSensorManager.registerListener(mAccelerometerListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
    }
    // Detect whether the device has Gyroscope on it
    if (Config.isSensorPresent(GYROSCOPE)) {
        //sendMessageToService(Sensor.TYPE_GYROSCOPE);
        mSensorManager.registerListener(mGyroscopeListener, mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_GAME);
    }
    // Detect whether the device has Magnetic Field Sensor
    if (Config.isSensorPresent(MAGNETIC_FIELD)) {
        //sendMessageToService(Sensor.TYPE_MAGNETIC_FIELD);
        mSensorManager.registerListener(mMagnetometerListener, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME);
    }

これは、それらすべてを同時に更新するわけではないようです。一体、それは他のセンサータイプを起動しません。

Is there a way to retrieve multiple sensor data in Android で提案されている方法を試しました。私にはうまくいきません。

4

2 に答える 2

0

単一のセンサーイベントリスナーを持ち、すべてのセンサーをそれに登録しますが、 onSensorChanged() メソッド内で、どのセンサーがそれを呼び出したかを調べ、それに応じて行動することができます。

public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE)//update gyro
if (event.sensor.getType() == //acclometer)update acc
.
.
.
so on

        }
于 2014-10-17T09:19:19.517 に答える