private static final int ROTATION_0 = 0;
初始情況,設備是橫屏還是豎屏與硬件設備安裝時默認的顯示方向有關。
private static final int ROTATION_90 = 1;
設置屏幕方向自動旋轉後,右側翻起側立時,屏幕會旋轉到這個方向。
private static final int ROTATION_270 = 2;
設置屏幕方向自動旋轉後,左側翻起度側立時,屏幕會旋轉到這個方向。
private static final int ROTATION_180 = 3;
設置屏幕方向自動旋轉後,屏幕底部側立時,屏幕會旋轉到這個方向。
(以上幾個常量在WindowOrientationListener.java中定義)
接下來看看WindowOrientationListener類
控制手機屏幕旋轉的關鍵類
該類為抽象類
WindowOrientationListener會註冊壹個Accelerator類型的SensorEventListener
系統中唯壹實現該類的為PhoneWindowManager類
在WindowOrientationListener類的構造函數中,會獲取壹個SensorManager類的實例對象,通過SensorManager獲取壹個加速度傳感器對象,最後new壹個SensorEventListener。
private WindowOrientationListener(Context context, int rate) {
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
mRate = rate;
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (mSensor != null) {
mSensorEventListener = new SensorEventListenerImpl(this);
}
}
給上述的mSensor註冊壹個監視器(也就是上述的mSensorEventListener)
public void enable() { //zai zhu ce jian shi qi qian mEnabled=false
if (mSensor == null) {
Log.w(TAG, "Cannot detect sensors. Not enabled");
return;
}
if (mEnabled == false) {
if (localLOGV) Log.d(TAG, "WindowOrientationListener enabled");
mSensorManager.registerListener(mSensorEventListener, mSensor, mRate);
mEnabled = true;
}
}