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命令