Android Galaxy选项卡和Transformer之间的方向差异

Android Galaxy选项卡和Transformer之间的方向差异,android,orientation,android-sensors,min3d,Android,Orientation,Android Sensors,Min3d,我使用前置摄像头和min3d库开发了一个增强现实应用程序。该应用程序在三星Galaxy Tab 10,1(第一代)上运行良好,运行Android 4.0.4 但是,在使用安卓4.1.1的华硕Transformer TF700T上测试同一应用程序(仅横向模式)时,会返回错误的方向,并且增强世界不再与相机视图匹配 以下代码用于获取min3D所需的方向向量target_轴和up_轴: SensorManager.getRotationMatrix(mR, null, mLastAcceleromete

我使用前置摄像头和min3d库开发了一个增强现实应用程序。该应用程序在三星Galaxy Tab 10,1(第一代)上运行良好,运行Android 4.0.4

但是,在使用安卓4.1.1的华硕Transformer TF700T上测试同一应用程序(仅横向模式)时,会返回错误的方向,并且增强世界不再与相机视图匹配

以下代码用于获取min3D所需的方向向量target_轴和up_轴:

SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); 
SensorManager.getOrientation(mR, mOrientation);
Number3d target_axis = new Number3d( -mR[2], -mR[5], -mR[8] );
Number3d up_axis = new Number3d( mR[1], mR[4], mR[7] );
MLAST加速度计和MLAST磁强计从传感器更改(传感器事件)上接收


有人能告诉我上面的代码是否仍然太依赖于设备吗?我希望使用SensorManager的gerOrientation调用,此解决方案应该适用于不同的设备?

我的猜测是,这与设备的方向有关,即纵向、横向、反向portrait、反向Elandscape等。您发布的代码肯定太幼稚了,因为它不考虑设备相对于其默认方向的旋转。使用类似于以下的方法计算方位角调整

int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
float screen_adjustment = 0;
switch(rotation) {
    case Surface.ROTATION_0:   screen_adjustment =          0;         break;
    case Surface.ROTATION_90:  screen_adjustment =   (float)Math.PI/2; break;
    case Surface.ROTATION_180: screen_adjustment =   (float)Math.PI;   break;
    case Surface.ROTATION_270: screen_adjustment = 3*(float)Math.PI/2; break;
}

这就是我在回答问题时用到的。其他人建议根据旋转数使用。最后,ASUS Transformer Pad TF700的硬件出了问题。在其他设备上,该应用程序按预期工作。

Ah,因为我以相同的方式握住两台设备,这表明Galaxy选项卡的“默认”方向与Asus Transformer不同?我不确定这些设备,但我认为平板电脑的默认方向可以是横向,而手机的默认方向往往是纵向的。