如何在纵向锁定设备时获取设备方向

Posted

技术标签:

【中文标题】如何在纵向锁定设备时获取设备方向【英文标题】:How to get device orientation whilst locking device in portrait 【发布时间】:2021-09-02 15:48:13 【问题描述】:

在我的应用中,我设置了纵向的首选方向

SystemChrome.setPreferredOrientations([
  DeviceOrientation.portraitUp,
])

但我想在不改变屏幕显示内容的情况下监听方向的变化

即使已锁定,我也想监听方向变化

我想要一些与此等效的代码

MediaQuery.of(context).orientation

但是,由于我已将其锁定为纵向,它总是会显示纵向

【问题讨论】:

【参考方案1】:

您可以为此使用 SensorManager 类:

SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(new SensorEventListener() 
        int orientation=-1;;

        @Override
        public void onSensorChanged(SensorEvent event) 
            if (event.values[1]<6.5 && event.values[1]>-6.5) 
                if (orientation!=1) 
                    Log.d("Sensor", "Landscape");
                
                orientation=1;
             else 
                if (orientation!=0) 
                    Log.d("Sensor", "Portrait");
                
                orientation=0;
            
        

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) 
            // TODO Auto-generated method stub

        
    , sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);

您还可以通过其他方式查看此帖子:Get phone orientation but fix screen orientation to portrait

【讨论】:

【参考方案2】:

我建议使用这个包native_device_orientation,它可以提供准确的方向,而不仅仅是查看设备的宽度。

// Gets the devices orientation
NativeDeviceOrientation orientation = await NativeDeviceOrientationCommunicator().orientation(useSensor:true);

【讨论】:

以上是关于如何在纵向锁定设备时获取设备方向的主要内容,如果未能解决你的问题,请参考以下文章