Android 強制獲取屏幕方向

jopen 9年前發布 | 27K 次閱讀 Android Android開發 移動開發

最近在做照相機功能,簡單的封裝系統相機,遇到一個問題就是無法獲取屏幕的當前方向導致屏幕旋轉之后無法獲得正確的方向,所以照片方向不對。

    在網上查了一下都是通過windowManager的Display或Configuration的getOrientation方法獲取當前屏幕方向。但是問題來了,兩種方法要求Activity不能固定方向,且需要系統打開自動旋轉才能獲取正確的值,否則會返回一個固定值。

    搜來搜去也就只有這兩種答案,我考慮只能用監聽方向傳感器來實現了,但是android orientation sensor對屏幕方向幾乎是不支持的。最后在API文檔里翻出來OrientationEventListener這個東西,看看文檔之后覺得這玩意簡直太科學了,比用windowManager/Configuration/orientationSensor科學多了,但是網上找不到介紹他的文章,真是好可惜!

    

    要實現OrientationEventListener需要創建一個成員變量:

OrientationEventListener mScreenOrientationEventListener;  

    對他初始化:
    this.mScreenOrientationEventListener = new OrientationEventListener(mActivity) {  
                @Override  
                public void onOrientationChanged(int i) {  
                    // i的范圍是0~359  
                    // 屏幕左邊在頂部的時候 i = 90;  
                    // 屏幕頂部在底部的時候 i = 180;  
                    // 屏幕右邊在底部的時候 i = 270;  
                    // 正常情況默認i = 0;  

                    if(45 <= i && i < 135) {  
                        mScreenExifOrientation = ExifInterface.ORIENTATION_ROTATE_180;  
                    } else if(135 <= i && i < 225) {  
                        mScreenExifOrientation = ExifInterface.ORIENTATION_ROTATE_270;  
                    } else if(225 <= i && i < 315) {  
                        mScreenExifOrientation = ExifInterface.ORIENTATION_NORMAL;  
                    } else {  
                        mScreenExifOrientation = ExifInterface.ORIENTATION_ROTATE_90;  
                    }  
                }  
            };  

    這樣無論屏幕有沒有固定方向,無論系統有沒有設定允許屏幕自動旋轉都能獲取到屏幕當前的方向了!

    開啟監聽的時候調用listener.enable(), 不需要監聽的時候listener.disable()就好了。

來自:http://blog.csdn.net/h3c4lenovo/article/details/43197759

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!