6

私は Android 用の単純なコンパス タイプのアプリケーションに取り組んでおり、Xoom WiFi でテストしています。加速度計の読み取り値の精度は常にSensorManager.SENSOR_STATUS_UNRELIABLEです。磁場の読み取り値は常に正確SensorManager.SENSOR_STATUS_ACCURACY_HIGHです。これは Xoom のバグでしょうか、それとも私のコードに問題があるのでしょうか?

onCreate:
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
accelGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

onResume:
mSensorManager.registerListener(accelListener, accelGravitySensor, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(magListener, magSensor, SensorManager.SENSOR_DELAY_NORMAL);

private final SensorEventListener accelListener = new SensorEventListener() {
  public void onSensorChanged(SensorEvent event) {
    Log.d(TAG, "accel (" + event.values[0] + ", " + event.values[1] + ", " + event.values[2] + ") accuracy=" + accuracyTag(event.accuracy));
  }
  public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
4

3 に答える 3

2

Nexus Sにも(ジャイロスコープで)この問題があり、読み取りの精度フィールドを設定するのを忘れた怠惰なドライバーライターが原因のようです;)

データに問題がない限り、これは純粋に表面的なものである必要があります。

于 2011-05-26T16:25:39.700 に答える
1

コンパスの精度に問題があるかどうかはわかりませんが、使用したときに問題が発生したことはわかっています。

magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)

次のようなものを使用することを強くお勧めします。

    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if(mySensors.size() > 0){
        mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_NORMAL);
        sersorrunning = true;
        Toast.makeText(this, "Start ORIENTATION Sensor", Toast.LENGTH_LONG).show(); 
    }

向きセンサーではなく磁場センサーを使用した場合、私の電話(Droid Incredible)ではかなりうまく機能しましたが、妻の電話(Droid Pro)や同僚の電話(Samsung)ではあらゆる種類の狂気がありましたギャラクシータブ)。したがって、デバイスの互換性の問題のためだけに、センサーの変更を検討することもできます。:-)

于 2011-05-28T19:39:10.417 に答える