android 系统关闭系统自动旋转屏幕情况下利用设备感应器(方向传感器)实现横竖屏切换

1.SensorManager详情请查阅http://developer.android.com/reference/android/hardware/SensorManager.html ,这个要比我讲更有效;

2.SensorManager sm=(SensorManager)getSystemService(SENSOR_SERVICE); 

3.在Activity的生命周期方法中注册与移除SensorEventListener;

在onResume()方法中注册sm.registerListerner(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);

其中Ssensor.TYPE_ORIENTATION该常量在3.0后已被Deprecated掉了,当时我还以为在4.0里不建议用了,用其他常量代替结果未能达到效果,然后我就查看sdk中自带的demo中使用的竟然还是这个常量,这样就简单了,剩下的就是在SensorEventListener接口的实现方法中实现自己的操作就可以了;

4.在onSensorChanged(SensorEvent event) 中实现自己的操作;

详情请查看:http://developer.android.com/reference/android/hardware/SensorEvent.html

  • alues[0]: Acceleration minus Gx on the x-axis
  • values[1]: Acceleration minus Gy on the y-axis
  • values[2]: Acceleration minus Gz on the z-axis

根据api文档中的说法在这块我只要values[2]就可实现当屏幕横竖屏时切换屏幕;

大概意思是绕Z轴正向旋转与逆向旋转两种方式,

1.正向旋转时只需要判断values[2]>40.0f&&values[2]<70.0f;

2.逆向旋转时只需要判断values[2]<-40.0f&&values[2]>-70.0f; 

3.屏幕竖直时也就是正向时判断 :values[2]<10.0f&&values[2]>-10.0f; 

当然你也可以根据你的实际情况(转屏时灵敏度)调整这个范围;

在实现中要对event事件加synchronized(this)同步块;

接下来的工作就是在三种状态下设置让屏幕旋转的方向(横屏,竖屏),其中要注意的是横屏有两种状态,正向横屏与逆向横屏时屏幕的内容要显示正确;

在这三种 状态下做的操作如下:

synchronized (this) {
int orientation = getRequestedOrientation();
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
if (40.0f < event.values[2] && event.values[2] < 70.0f) {// 向左
if (orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (-10.0f < event.values[2] && event.values[2] < 10.0f) { // 正北
if (orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
} else if (-70.0f < event.values[2] && event.values[2] < -40.0f) { // 向右
if (orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
}
} else {
}
}


通过上述判断就可实现系统关闭系统屏幕旋转也能够自动横屏,不过在用上述方式实现前先要对manifest进行配置,详细配置见http://blog.csdn.net/sxn1000/article/details/17098351

转载请注明出处!





更多相关文章

  1. 读写系统设置
  2. Android调用系统短信功能发送短信
  3. 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
  4. 【Android】Android实现截取当前屏幕图片并保存至SDCard
  5. 安卓视频通讯与监控系统完全版本正式发布
  6. 增加系统最大音量
  7. android 修改系统程序图标大小
  8. 浅谈android系统java调用C++函数传参过程

随机推荐

  1. android CTS测试全pass攻略
  2. 在Android中如何使用全局变量--Applicati
  3. android SDK2.3 更新改动翻译
  4. Android(安卓)Studio 单刷《第一行代码》
  5. android - 为安全而设计 - 3 - 开发文档
  6. RelativeLayout布局用到的主要属性
  7. Android(安卓)Studio 单刷《第一行代码》
  8. android - 为安全而设计 - 3 - 开发文档
  9. RelativeLayout
  10. Android—最新版Android(安卓)studioSDK