5

電話の向きを取得する必要があります。現時点で私はこれを書いた:

public void onSensorChanged(SensorEvent event) {
  switch (event.sensor.getType()){
  case Sensor.TYPE_MAGNETIC_FIELD:
    this.mag_vals = event.values.clone();
    this.sensorReady = true;
    break;
  case Sensor.TYPE_ACCELEROMETER:
    this.acc_vals = event.values.clone();
    break;
  }
  if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) {
    this.sensorReady = false;
    float[] R = new float[ProjectConstants.SIZE_MATRIX];
    float[] I = new float[ProjectConstants.SIZE_MATRIX];
    SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals);

    SensorManager.getOrientation(R, this.actual_orientation);
    ...  

このコードを使用すると、電話を平らな面に置いたまま、表面上で回転させた場合に、電話の向きを取得できます。

私が理解していなかったのthis.actual_orientation[0]は、[ここ] [1]で説明したように、電話をzed軸の回転であるの値を上に動かすと、回転がないのに値が増加する理由です。

誰かが何が起こるか知っていましたか?

編集

もう一つの奇妙なこと..

職場のオフィスでアプリケーションを試しましたが、前に説明した奇妙な動作がありました。同じオフィス(同じ状況)で、市場から入手したコンパスアプリを試しましたが、同じ動作をしています。電話を上に動かすと、値が一貫して変化しました。同じオフィス(同じ状況)でi-phoneコンパスを試しましたが、そのような奇妙な動作はありませんでした。

それから家に着いたら、Android携帯のアプリとコンパスアプリの両方を試してみましたが、動作しました!!携帯を上に動かしても値は安定しています...

どうもありがとう。

[1]:http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float []、float [])

4

2 に答える 2

4

デバイスによって得られる配向推定値は、局所的な磁場の方向に部分的に依存します。建物内、鉄の構造物の近く、および電化製品の近くでは、感知される磁場は、フィートで測定された距離によって大幅に変化する可能性があります。この効果は、手持ちの磁力計またはガウスメーターで簡単に確認できます。

これらの歪みがアプリケーションの奇妙な動作の原因であると思われます。

于 2010-08-23T21:02:54.700 に答える
1

それを持ち上げると、回転角が導入され、これがgetOrientationの戻り値に影響します。回転角は、通常の位置からのデバイスの回転量を測定します。つまり、通常の位置が縦向きを意味するほとんどのデバイスでは、電話が横向きの場合、回転角は90または-90になります。したがって、正しい読み取りが必要な場合は、getOrientationを呼び出す前にremapCoordinateSystemを呼び出す必要があります。

于 2012-03-31T00:01:53.607 に答える