我对“指南针”有点问题。
我想在屏幕上显示我正在用相机查看的方向。
为此,我在横向模式下运行CameraView
和Activity
。
现在我尝试用传感器来确定方向,但出了点问题。当我启动应用程序时,它会显示一些奇怪的数据,但在摇动手机后会显示正确的数据?!
也许你可以帮助我。这是我的onSensorChanged方法:
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
mGrav = event.values.clone();
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
mMag = event.values.clone();
}
if (SensorManager.getRotationMatrix(mRinn, null, mGrav, mMag)) {
SensorManager.remapCoordinateSystem(mRinn, SensorManager.AXIS_X, SensorManager.AXIS_Z, mRout);
SensorManager.getOrientation(mRout, mOrient);
//Logger.d("direction?: " + Math.toDegrees(mOrient[0]));
setOrientationText(Math.toDegrees(mOrient[0]));
}
}
我正在获取两个传感器(磁铁和加速器)的数据,然后创建RotationMatrix(就像文档告诉我的那样)。如果它是风景我把X - > X轴和Y - > RotationMatrix的Z轴。
此活动的screenOrientation也是横向的。
但我真的不明白为什么我只是在握手后才能得到正确的数据?!
答案 0 :(得分:0)
我认为这是与传感器初始化有关的问题。你可以看到我对similar question做了什么回答。
简而言之:
对于某些轴(两个或有时,读数)为零 只有一个)。刚刚启用传感器时会发生此问题 (registerListener())我认为它与某种类型相关 传感器初始化在加速度传感器的情况下,我有 观察到只需轻轻摇动一下设备即可启动 给出正确的传感器读数。
正确的解决方案是onAccuracyChanged()给出的方法 有关传感器状态的正确信息。