2
我正在構建一個Android設備應用程序,它將設備指南針的度數記錄到一個文件中。有兩種方法得到這個度:Android磁力計返回隨機值
方法1:
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor orientationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
mSensorManager.registerListener(this, orientationSensor, SensorManager.SENSOR_DELAY_NORMAL);
public void onSensorChanged(SensorEvent event) {
float azimuthInDegrees = event.values[0]
}
方法2:
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL);
float[] mGravity;
float[] mGeomagnetic;
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mGravity = event.values;
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mGeomagnetic = event.values;
}
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
float azimuthInDegress = ((float) Math.toDegrees(orientation[0]) + 360) % 360;
}
}
}
我放置我的設備在北方方向嘗試了兩種方法(大約360度):
方法1回報完美的效果,但遺憾的是這種方法已經過時:
- 359.6567
- 359.5034
- 359.859
- 359.76212
- 359.8878
- 359.87048
- 359.8356
- 359.80356
- 359.81192
- 359.7671
- 359.84668
- 359.88528
方法2也返回良好的結果,但有時(隨機地),它返回一個不正確的程度:
- 359.91495
- 359.83652
- 263.67697
- 359.67993
- 359.70038
- 359.688
- 359.71155
- 359.70276
- 359.6984
- 359.6429
- 270.6323
- 359.62302
- 359.49954
- 359.44757
- 359.47803
- 359.4947
- 359.39572
正如你所看到的,一些不正確的程度是隨機與第二種方法返回。該設備進行了校準,我認爲問題在於第二種方法,因爲第一種方法會返回完美結果。你們能幫我嗎?
什麼位置是設備,當你得到這些結果。例如直接拿着設備 – 2013-03-25 18:59:28
我握着它在我的手中。幾乎平坦 – user1135357 2013-03-25 19:02:00
只需更改? = event.values到event.values.clone(),看看你是否仍然有相同的行爲。 – 2013-03-25 19:07:53