我正在構建一個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.clone();
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mGeomagnetic = event.values.clone();
}
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返回以下記錄的JSON數據:
[
{
"start time":"25-03-2013 20:42:11.071",
"direction":"N",
"end time":"25-03-2013 20:42:14.711"
},
{
"start time":"25-03-2013 20:42:14.781",
"direction":"NE",
"end time":"25-03-2013 20:42:18.842"
},
{
"start time":"25-03-2013 20:42:18.912",
"direction":"E",
"end time":"25-03-2013 20:42:21.643"
},
{
"start time":"25-03-2013 20:42:21.712",
"direction":"SE",
"end time":"25-03-2013 20:42:25.072"
},
{
"start time":"25-03-2013 20:42:25.142",
"direction":"S",
"end time":"25-03-2013 20:42:27.524"
},
{
"start time":"25-03-2013 20:42:27.593",
"direction":"SW",
"end time":"25-03-2013 20:42:30.113"
},
{
"start time":"25-03-2013 20:42:30.184",
"direction":"W",
"end time":"25-03-2013 20:42:32.773"
},
{
"start time":"25-03-2013 20:42:32.843",
"direction":"NW",
"end time":"25-03-2013 20:42:34.943"
},
{
"start time":"25-03-2013 20:42:35.013",
"direction":"N",
"end time":"25-03-2013 20:42:37.394"
}
]
方法2個返回記錄以下JSON數據:
[
{
"start time":"25-03-2013 20:36:07.337",
"direction":"N",
"end time":"25-03-2013 20:36:09.728"
},
{
"start time":"25-03-2013 20:36:09.741",
"direction":"NE",
"end time":"25-03-2013 20:36:13.832"
},
{
"start time":"25-03-2013 20:36:13.832",
"direction":"E",
"end time":"25-03-2013 20:36:16.689"
},
{
"start time":"25-03-2013 20:36:16.754",
"direction":"SE",
"end time":"25-03-2013 20:36:16.754"
},
{
"start time":"25-03-2013 20:36:16.819",
"direction":"E",
"end time":"25-03-2013 20:36:16.819"
},
{
"start time":"25-03-2013 20:36:16.819",
"direction":"SE",
"end time":"25-03-2013 20:36:16.819"
},
{
"start time":"25-03-2013 20:36:16.884",
"direction":"E",
"end time":"25-03-2013 20:36:17.014"
},
{
"start time":"25-03-2013 20:36:17.014",
"direction":"SE",
"end time":"25-03-2013 20:36:19.546"
},
{
"start time":"25-03-2013 20:36:19.546",
"direction":"S",
"end time":"25-03-2013 20:36:22.338"
},
{
"start time":"25-03-2013 20:36:22.338",
"direction":"SW",
"end time":"25-03-2013 20:36:25.260"
},
{
"start time":"25-03-2013 20:36:25.324",
"direction":"W",
"end time":"25-03-2013 20:36:25.324"
},
{
"start time":"25-03-2013 20:36:25.324",
"direction":"SW",
"end time":"25-03-2013 20:36:25.390"
},
{
"start time":"25-03-2013 20:36:25.390",
"direction":"W",
"end time":"25-03-2013 20:36:27.987"
},
{
"start time":"25-03-2013 20:36:28.051",
"direction":"NW",
"end time":"25-03-2013 20:36:28.128"
},
{
"start time":"25-03-2013 20:36:28.181",
"direction":"W",
"end time":"25-03-2013 20:36:28.181"
},
{
"start time":"25-03-2013 20:36:28.181",
"direction":"NW",
"end time":"25-03-2013 20:36:28.181"
},
{
"start time":"25-03-2013 20:36:28.246",
"direction":"W",
"end time":"25-03-2013 20:36:28.246"
},
{
"start time":"25-03-2013 20:36:28.246",
"direction":"NW",
"end time":"25-03-2013 20:36:30.974"
},
{
"start time":"25-03-2013 20:36:31.038",
"direction":"N",
"end time":"25-03-2013 20:36:36.233"
}
]
正如你所看到的,第二種方法的結果並不順利雖然我做了一個從北到北的直道。我更喜歡使用第一種方法,但問題是它已被棄用。另一方面,第二種方法不記錄流暢的數據。我認爲你應該怎麼做?
是設備扁平 – 2013-03-25 20:33:50
@HoanNguyen嗨的一次。是的,它是平坦的。我在兩種方法中都進行了同樣的動作,即將設備平放在手上,並進行360度轉動。 – user1135357 2013-03-25 20:40:24
我嘗試發佈答案,但我可以在電話上鍵入。我會在大約1小時後發佈答案。同時使用TYPE GRAVITY(需要API> 8) – 2013-03-25 21:02:12