使用传感器事件检测电话方向

我有一个活动,这需要它的方向被locking

setRequestedOrientation(screenOrientation); 

但是我想获得方向更新,以便我可以对UI进行调整(想象一下HTC相机应用程序,只有button的图标改变方向时)。 所以我find了这个class 。 它提供的方向值介于0到360之间。我是否要过滤这个值,即完美区间[a, b] ,如果a<x<b那么方向是横向还是纵向? 计算是什么意思? 任何提示?

Solutions Collecting From Web of "使用传感器事件检测电话方向"

这听起来像是你需要代码才会反应,当设备的方向已经改变到4个正常方向之一,而不是在每个angular度。 这将过滤方向仅0,90,180和270度的值:

 OrientationEventListener myOrientationEventListener; int iOrientation; myOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) { @Override public void onOrientationChanged(int iAngle) { // 0 15 30 45 60 75, 90 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345 final int iLookup[] = {0, 0, 0,90,90, 90,90, 90, 90, 180, 180, 180, 180, 180, 180, 270, 270, 270, 270, 270, 270, 0, 0, 0}; // 15-degree increments if (iAngle != ORIENTATION_UNKNOWN) { int iNewOrientation = iLookup[iAngle / 15]; if (iOrientation != iNewOrientation) { iOrientation = iNewOrientation; // take action on new orientation here } } } }; // To display if orientation detection will work and enable it if (myOrientationEventListener.canDetectOrientation()) { Toast.makeText(this, "Can DetectOrientation", Toast.LENGTH_LONG).show(); myOrientationEventListener.enable(); } else { Toast.makeText(this, "Can't DetectOrientation", Toast.LENGTH_LONG).show(); }