1

onCreateメソッド内でAndroid加速度計の値を取得することは可能ですか? それらを読んだ後にいくつかの初期化を行うために、私はそれが欲しいです。これまでのところ、センサー リスナーを登録して、onSensorChanged コールバックを通じて値が変化したときに値を取得しました。3 つの float 属性 ( lastxlastylastz ) を -1 に初期化して、変更時に加速度計の値をそこに格納します。メソッドではonCreate、センサー リスナーを登録した後、これらの値を確認しようとしていますが、常に -1 です。メソッド内でこれらの値を取得する方法はありonCreateますか?

これが私のコードです:

public class MainActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;

    TextView textView;
    StringBuilder builder = new StringBuilder();
    float lastx = -1;
    float lasty = -1;
    float lastz = -1;

    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        textView = new TextView(this);

        SensorManager manager = (SensorManager) 
                     getSystemService(Context.SENSOR_SERVICE);

        Sensor accelerometer = manager.getDefaultSensor(
                                     Sensor.TYPE_ACCELEROMETER);

        if(!manager.registerListener(this, accelerometer,
                                     SensorManager.SENSOR_DELAY_GAME)){
        Log.d("ERROR: ", "NO accelerometer found!");
        }

        setContentView(textView);
        builder.setLength(0);

        builder.append(
           "X " + this.lastx + "\nY " + this.lasty + "\nZ " + this.lasty);
        textView.setText(builder.toString());

         Log.d(" * accelerometer values:",
            "X: " + this.lastx+", Y: " + this.lasty + ", Z: " + this.lastz);

    }

    public void onAccuracyChanged(Sensor sensor,int accuracy){

    }

    public void onSensorChanged(SensorEvent event){

            // check sensor type
            if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

                 // assign directions
                 float x=event.values[0];
                 float y=event.values[1];
                 float z=event.values[2];

                 this.lastx = x;
                 this.lasty = y;
                 this.lastz = z;

                 // builder.setLength(0);
                 // builder.append("X " + x + "\nY " + y + "\nZ " + z);
                 // textView.setText(builder.toString());
      }
  }
}
4

2 に答える 2

2

onCreateメインのユーザー インターフェイス スレッドはと の両方で使用されていると思いますonSensorChanged。そのため、終了onSensorChangedするまで実行できませんonCreate。どのような初期化を行う必要がある場合でも、 の最初の呼び出しでそれが実行されるように調整することをお勧めしますonSensorChanged。たとえば、値が -1 の場合に初期化を実行します。

于 2013-06-11T11:48:15.193 に答える