日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 程序根据重力感应切换程序的方向

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 程序根据重力感应切换程序的方向 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我是標題

今天處理了一下程序的重力感應切換問題,查了好多資料,的確得到了實現方法,但是有點差強人意,實現的效果最終的確可以實現橫豎屏以及反向橫豎屏的切換,但是卻無視了系統通知欄對于方向的鎖定與否…
剛開始我的想法是得到 系統的當前是否鎖定了方向 通過

//返回值0表示關閉了重力感應(鎖定方向),1表示開啟了重力感應(旋轉) Settings.System.getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION)

得到系統的設定,然后自己決定在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 程序根据重力感应切换程序的方向的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。