重力传感器-横竖屏的切换

这里只使用竖屏之间的切换,既然使用到切换,又不能销毁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);
    }

 

posted @ 2017-04-29 13:19  ts-android  阅读(473)  评论(0编辑  收藏  举报