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. Android锁屏API-DevicePolicyManager介绍
  2. ICS SystemServer之Device Policy
  3. android UI进阶之弹窗的使用(2)--实现通讯录的弹窗效果
  4. RK3288 Android(安卓)7.1 调试 USB MIDI
  5. android用户界面之菜单(Menu)教程实例汇总
  6. 转载:android 进程保活
  7. Android模糊处理实现图片毛玻璃效果
  8. 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. MySQL8.0.24版本Release Note的一些改进
  2. 详解MySQL的半同步
  3. 详解MySQL事务的隔离级别与MVCC
  4. MySQL之高可用集群部署及故障切换实现
  5. 教你用eclipse连接mysql数据库
  6. MySQL 慢查询日志深入理解
  7. MySQL root密码的重置方法
  8. MySQL性能压力基准测试工具sysbench的使
  9. Mysql MVCC机制原理详解
  10. 详解MySQL 用户权限管理