Titanium:应用程序锁定为纵向,但相机旋转,如何确定实际设备方向?

Titanium: App locked to portrait, yet camera rotates, how to determine actual device orientation?

Appcelerator Titanium 应用程序,具体询问 Android

我们的应用被锁定为纵向模式:

然而,当我们显示相机(带有覆盖层)时,允许旋转。这意味着用户照片最终可能会横向或上下颠倒。不幸的是,由于该应用程序被锁定为纵向模式,Ti.Gesture.orientationmyWindow.orientation 始终 returns 1(纵向),因此我们无法手动取消旋转图像。

我如何才能 a) 锁定相机的方向,或 b) 找到实际的设备方向以便我可以手动取消旋转图像?

答案是使用加速度计。

function accelerometerCallback(e) {
  var deviceOrientation;
  // Get the current device angle
  var xx = -e.x;
  var yy = e.y;
  var angle = Math.atan2(yy, xx);

  if (angle >= -2.25 && angle <= -0.75) {
    deviceOrientation = "portraitUpsideDown";
  } else if (angle >= -0.75 && angle <= 0.75) {
    deviceOrientation = "landscapeRight";
  } else if (angle >= 0.75 && angle <= 2.25) {
    deviceOrientation = "portrait";
  } else if (angle <= -2.25 || angle >= 2.25) {
    deviceOrientation = "landscapeLeft";
  }

  console.log('ACCELEROMETER: orientation = ' + deviceOrientation);
}

Ti.Accelerometer.addEventListener('update', accelerometerCallback);

myWin.addEventListener('close', function () {
  Ti.Accelerometer.removeEventListener('update', accelerometerCallback);
});

请记住,加速度计侦听器每秒会触发数十亿次,并且会消耗电池电量。确保尽快删除 update 侦听器。