重力传感器-横竖屏的切换
这里只使用竖屏之间的切换,既然使用到切换,又不能销毁activity,所以你懂的...
/** * 重力感应 */ private SensorManager sensorManager; private long lastAutoFullscreenTime;//记录上一次切换的时间 private DialogAutoFullscreenListener dialogAutoFullscreenListener; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); dialogAutoFullscreenListener = new DialogAutoFullscreenListener(); } /** * 重力感应 */ public class DialogAutoFullscreenListener implements SensorEventListener { @Override public void onSensorChanged(SensorEvent event) {//可以得到传感器实时测量出来的变化值 if(videoPlayBuyDialog!=null && videoPlayBuyDialog.isShowing()){ final float x = event.values[SensorManager.DATA_X]; float y = event.values[SensorManager.DATA_Y]; float z = event.values[SensorManager.DATA_Z]; //过滤掉用力过猛会有一个反向的大数值 if (((x > -15 && x < -8) || (x < 15 && x > 8)) && Math.abs(y) < 1.5) { if ((System.currentTimeMillis() - lastAutoFullscreenTime) > 2000) { Log.e("tag","x="+x); if (x > 0) { MainActivity.this.setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//竖屏 } else { MainActivity.this.setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);//反向的竖屏 } lastAutoFullscreenTime = System.currentTimeMillis(); } } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } @Override protected void onResume() { super.onResume(); //注册重力感应监听 Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(dialogAutoFullscreenListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); //取消重力感应的监听 sensorManager.unregisterListener(dialogAutoFullscreenListener); }