0

我想同时访问方向和加速度传感器。这样做的正确方法是什么?

我在用

public class MainActivity extends Activity
{
    private SensorManager sensorManager;
    private Sensor sensor;
    private Sensor sensor2;
    private float x, y, z;
    private float x1, y1, z1;
    private String output;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
        sensor2 = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION).get(0);
    }

    private void refreshDisplay() {
        output = String.format(";%f;%f;%f;%f;%f;%f", x, y, z, x1, y1, z1);
    }

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(accelerationListener, sensor,
        SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(orientationListener, sensor2,
        SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    protected void onPause() {
        sensorManager.unregisterListener(accelerationListener);
        sensorManager.unregisterListener(orientationListener);
        super.onStop();
    }

    private SensorEventListener accelerationListener = new SensorEventListener() {
        @Override
        public void onAccuracyChanged(Sensor sensor, int acc) {
        }

        @Override
        public void onSensorChanged(SensorEvent event) {
            x = event.values[0];
            y = event.values[1];
            z = event.values[2];
            refreshDisplay();
        }

    };

    private SensorEventListener orientationListener = new SensorEventListener() {
        @Override
        public void onAccuracyChanged(Sensor sensor, int acc) {
        }

        @Override
        public void onSensorChanged(SensorEvent event) {
            x1 = event.values[0];
            y1 = event.values[1];
            z1 = event.values[2];
            refreshDisplay();
        }

    };        
}

但这是波涛汹涌的。仅使用传感器或加速度计是平稳的。

编辑:暂停

4

1 回答 1

1

我想同时访问方向和加速度传感器。这样做的正确方法是什么?

我会使用getDefaultSensor()onSensorManager而不是假设列表中的第 0 个条目是正确的。

此外,要么将onResume()andonPause()作为一对使用,要么将onStart()and作为一对使用onStop()。您正在使用onResume()and onStop(),这意味着您可能会多次注册传感器事件。

但这是波涛汹涌的

考虑到您没有对上面显示的代码中的数据做任何事情,我不知道您如何判断某些东西是“不稳定的”。此外,您的真实代码对数据所做的操作可能是导致两次数据输入时出现“断断续续”行为的原因——使用 Traceview 来确定您在哪里花费了超出预期的时间。

于 2012-05-07T00:14:43.907 回答