我正在构建一个 Android 应用程序,它将设备的罗盘度数记录到一个文件中。有两种方法可以获得这个学位:
方法一:
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]
}
方法二:
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"
}
]
如您所见,尽管我从北到北直接转了一圈,但第二种方法的结果不如第一种方法顺利。我更喜欢使用第一种方法,但问题是它已被弃用。另一方面,第二种方法不记录平滑数据。在你们看来我该怎么办?