我已经实现了一个包含以下传感器的应用程序:
这是onSensorChanged()方法的示例代码:
@Override
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
if (type == Sensor.TYPE_GYROSCOPE) {
// Log.e(TAG, "Unreliable gyroscope");
} else if (type == Sensor.TYPE_GRAVITY) {
// Log.e(TAG, "Unreliable gravity");
}
return;
}
if (type == Sensor.TYPE_ACCELEROMETER) {
mmAcceleration = event.values.clone();
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
mmGeomagnetic = event.values.clone();
} else if (type == Sensor.TYPE_GYROSCOPE) {
mmRotation = event.values.clone();
} else if (type == Sensor.TYPE_ORIENTATION) {
mmOrientation = event.values.clone();
} else if (type == Sensor.TYPE_GRAVITY) {
mmGravity = event.values.clone();
}
if (mmAcceleration != null && mmGeomagnetic != null
&& mmOrientation != null) {
// Handling the data ...
mmAcceleration = null;
mmGeomagnetic = null;
mmRotation = null;
mmOrientation = null;
mmGravity = null;
}
}
我试过代码的设备是HTC One S.我在3个分立设备上尝试过它。此外,我已多次校准G传感器,然后启动应用程序,但我仍然得到不可靠的结果。此外,我已尝试校准,重新启动手机,然后再次校准,甚至在重新启动后直接运行我的应用程序。其他传感器工作正常。此外,我尝试过不同的环境(室内),我并不接近任何干扰源。
对于陀螺仪和重力(使用陀螺仪)传感器,我仍然变得不可靠(SENSOR_STATUS_UNRELIABLE)。
您对可能出现的问题有什么建议吗?
提前谢谢你。
答案 0 :(得分:0)
我认为您可能想要的是对加速度计数据和陀螺仪数据应用“免费滤波器”或“卡尔曼滤波器”......应该可以解决这个问题....