android 程序根据重力感应切换程序的方向
我是標(biāo)題
今天處理了一下程序的重力感應(yīng)切換問(wèn)題,查了好多資料,的確得到了實(shí)現(xiàn)方法,但是有點(diǎn)差強(qiáng)人意,實(shí)現(xiàn)的效果最終的確可以實(shí)現(xiàn)橫豎屏以及反向橫豎屏的切換,但是卻無(wú)視了系統(tǒng)通知欄對(duì)于方向的鎖定與否…
剛開(kāi)始我的想法是得到 系統(tǒng)的當(dāng)前是否鎖定了方向 通過(guò)
得到系統(tǒng)的設(shè)定,然后自己決定在onresume() 中決定是否注冊(cè)重力感應(yīng),但是此方法做不到實(shí)時(shí)的根據(jù)用戶(hù)的設(shè)定而注冊(cè)(解除注冊(cè)) 下拉通知欄并不會(huì)觸發(fā) onresume()和onpause()
又想到是否能獲取到系統(tǒng)的重力感應(yīng)的開(kāi)關(guān)呢? 費(fèi)了九牛二虎之力發(fā)現(xiàn) 找不到…
好吧 ,最后絕望的我研究了一下 ActivityInfo中關(guān)于屏幕方向的變量,網(wǎng)上也有定義,但是成功離不開(kāi)實(shí)踐
SCREEN_ORIENTATION_UNSPECIFIED 根據(jù)系統(tǒng)(系統(tǒng)禁用重力感應(yīng)就會(huì)鎖定方向,反之方向跟隨重力感應(yīng)) SCREEN_ORIENTATION_LANDSCAPE 水平 SCREEN_ORIENTATION_PORTRAIT 豎直 SCREEN_ORIENTATION_USER SCREEN_ORIENTATION_BEHIND SCREEN_ORIENTATION_SENSOR 根據(jù)重力感應(yīng)的方向 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別的沒(méi)實(shí)踐,不敢妄下結(jié)論
以下是代碼
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);//根據(jù)系統(tǒng)來(lái)決定屏幕旋轉(zhuǎn)的方向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);記得把對(duì)應(yīng)的activity 的方向設(shè)置為
android:configChanges=”orientation|keyboardHidden|screenSize|navigation”
總結(jié)
以上是生活随笔為你收集整理的android 程序根据重力感应切换程序的方向的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android修改重力感应方向
- 下一篇: java基础-常用快捷键及基本dos命令