android 程序根据重力感应切换程序的方向
生活随笔
收集整理的這篇文章主要介紹了
android 程序根据重力感应切换程序的方向
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我是標題
今天處理了一下程序的重力感應切換問題,查了好多資料,的確得到了實現方法,但是有點差強人意,實現的效果最終的確可以實現橫豎屏以及反向橫豎屏的切換,但是卻無視了系統通知欄對于方向的鎖定與否…
剛開始我的想法是得到 系統的當前是否鎖定了方向 通過
得到系統的設定,然后自己決定在onresume() 中決定是否注冊重力感應,但是此方法做不到實時的根據用戶的設定而注冊(解除注冊) 下拉通知欄并不會觸發 onresume()和onpause()
又想到是否能獲取到系統的重力感應的開關呢? 費了九牛二虎之力發現 找不到…
好吧 ,最后絕望的我研究了一下 ActivityInfo中關于屏幕方向的變量,網上也有定義,但是成功離不開實踐
SCREEN_ORIENTATION_UNSPECIFIED 根據系統(系統禁用重力感應就會鎖定方向,反之方向跟隨重力感應) SCREEN_ORIENTATION_LANDSCAPE 水平 SCREEN_ORIENTATION_PORTRAIT 豎直 SCREEN_ORIENTATION_USER SCREEN_ORIENTATION_BEHIND SCREEN_ORIENTATION_SENSOR 根據重力感應的方向 SCREEN_ORIENTATION_NOSENSOR SCREEN_ORIENTATION_SENSOR_LANDSCAPE SCREEN_ORIENTATION_SENSOR_PORTRAIT SCREEN_ORIENTATION_REVERSE_LANDSCAPE 反向的水平 SCREEN_ORIENTATION_REVERSE_PORTRAIT 反向的豎直 SCREEN_ORIENTATION_FULL_SENSOR SCREEN_ORIENTATION_USER_LANDSCAPE SCREEN_ORIENTATION_USER_PORTRAIT SCREEN_ORIENTATION_FULL_USER SCREEN_ORIENTATION_LOCKED別的沒實踐,不敢妄下結論
以下是代碼
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mSensorListener = new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {float[] values = event.values;int orientation = ORIENTATION_UNKNOWN;float X = -values[_DATA_X];float Y = -values[_DATA_Y];float Z = -values[_DATA_Z]; float magnitude = X*X + Y*Y;// Don't trust the angle if the magnitude is small compared to the y valueif (magnitude * 4 >= Z*Z) {float OneEightyOverPi = 57.29577957855f;float angle = (float)Math.atan2(-Y, X) * OneEightyOverPi;orientation = 90 - (int)Math.round(angle);// normalize to 0 - 359 rangewhile (orientation >= 360) {orientation -= 360;} while (orientation < 0) {orientation += 360;}}if (orientation>45&&orientation<135) { // getActivity().setRequestedOrientation(8);//根據系統來決定屏幕旋轉的方向getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);}else if (orientation>135&&orientation<225){getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); // getActivity().setRequestedOrientation(9);}else if (orientation>225&&orientation<315){getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); // getActivity().setRequestedOrientation(0);}else if ((orientation>315&&orientation<360)||(orientation>0&&orientation<45)){ // getActivity().setRequestedOrientation(1);getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {//nothing}};getDkActivity().addSensorListener(sensor, mSensorListener, SensorManager.SENSOR_DELAY_UI);記得把對應的activity 的方向設置為
android:configChanges=”orientation|keyboardHidden|screenSize|navigation”
總結
以上是生活随笔為你收集整理的android 程序根据重力感应切换程序的方向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android修改重力感应方向
- 下一篇: java基础-常用快捷键及基本dos命令