4

StackOverflow からの提案のいくつかを使用して、(学習目的で) 加速度計アプリを作成しました。すべて正常に動作しますが、コードで警告として「SensorManager.DATA_X is deprecated」というメッセージが表示されます。

// setup the textviews for displaying the accelerations
mAccValueViews[SensorManager.DATA_X] = (TextView) findViewById(R.id.accele_x_value);
mAccValueViews[SensorManager.DATA_Y] = (TextView) findViewById(R.id.accele_y_value);
mAccValueViews[SensorManager.DATA_Z] = (TextView) findViewById(R.id.accele_z_value);

「SensorManager.DATA_X」を使用する代わりに、ここや他の場所で何をすべきかを検索しようとしましたが、指示が見つからないようです。

公式ガイドでは代わりに「センサー」を使用するように書かれていますが、方法がわかりません!

上記を行う新しい「公式」の方法を誰かが提案できれば、私は非常に感謝しています。

編集 ドキュメントを読み直した後(今回は正しく!)、「SensorManager.DATA_X」がonSensorChanged(int、float [])によって返される配列内のX値のインデックスであるintを返すだけであることに気付きました。上記のコードをこれに変更することができました。これは完全に機能し、非推奨の警告はありません。

// setup the textviews for displaying the accelerations
    mAccValueViews[0] = (TextView) findViewById(R.id.accele_x_value);
    mAccValueViews[1] = (TextView) findViewById(R.id.accele_y_value);
    mAccValueViews[2] = (TextView) findViewById(R.id.accele_z_value);
4

1 に答える 1

5

ドキュメントはそれについて非常に明確です。センサーを作成します。

private SensorManager mSensorManager;
private Sensor mSensor;

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

if (mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}

Sensorがあり、それを使用するリスナーを登録します。

mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);

その後、OnSensorChanged を使用してを取得できます。

  @Override
  public final void onSensorChanged(SensorEvent event) {
    // Many sensors return 3 values, one for each axis.
    float xaccel = event.values[0];
    // Do something with this sensor value.
  }
于 2012-12-03T16:37:15.957 に答える