1. 程式人生 > >螢幕旋轉--自動及手動控制(視訊播放中setRequestedOrientation之後手機螢幕的旋轉不觸發onConfigurationChanged方法)

螢幕旋轉--自動及手動控制(視訊播放中setRequestedOrientation之後手機螢幕的旋轉不觸發onConfigurationChanged方法)

在呼叫了setRequestedOrientation之後,手機螢幕的旋轉不觸發onConfigurationChanged方法,這個時候需要再呼叫一次

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);方法,讓他開啟自動旋轉事件

如程式碼:

	/**
     * 開啟監聽器
     */
    private final void startListener() {
        mOrientationListener = new OrientationEventListener(this) {
            @Override
            public void onOrientationChanged(int rotation) {

            	if (startRotation == -2) {//初始化角度
					startRotation = rotation;
				}
            	//變化角度大於30時,開啟自動旋轉,並關閉監聽
            	int r = Math.abs(startRotation - rotation);
            	r = r > 180 ? 360 - r : r;
            	if (r > 30) {
            		//開啟自動旋轉,響應螢幕旋轉事件
            		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
            		this.disable();
				}
            }
        };
    }
	

在手動旋轉按鈕監聽事件中寫下

			//設定完之後變成強制設定為橫屏或縱屏,如同AndroidManifest.xml中設定了android:screenOrientation
			if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
				setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
			}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
				setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
			}
			//2秒後開啟螢幕旋轉監聽,用來開啟自動旋轉,響應螢幕旋轉事件
			orientationHandler.sendEmptyMessageDelayed(0, 2000);

最後設定handler

	private OrientationEventListener mOrientationListener; // 螢幕方向改變監聽器
	private int startRotation;
	Handler orientationHandler = new Handler(){
		public void handleMessage(Message msg) {
			startRotation = -2;
			mOrientationListener.enable();
		};
	};