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();
        }

    };        
}

しかし、これは途切れ途切れです。センサーまたは加速度計のみを使用するのはスムーズです。

編集済み:OnPause

4

1 に答える 1

1

方向センサーと加速度センサーに同時にアクセスしたい。これを行う正しい方法は何ですか?

リストの 0 番目のエントリが正しいエントリであると想定するのではなく、getDefaultSensor()onを使用します。SensorManager

また、 と をペアで使用するか、onResume()onPause()をペアで使用onStart()onStop()てください。と を使用しているonResume()ためonStop()、センサーイベントに複数回登録する場合があります。

でもこれはしょぼいな

上記のコードのデータで何もしていないことを考えると、何かが「途切れ途切れ」であるとどのように判断できるかわかりません。さらに、実際のコードがデータに対して行っている処理が、2 倍のデータ入力による「途切れ途切れ」の動作の原因である可能性があります。Traceview を使用して、予想以上の時間を費やしている場所を特定してください。

于 2012-05-07T00:14:43.907 に答える