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

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);

【讨论】:

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

在移动设备上,如何在屏幕方向为横向时显示叠加层并在纵向时将其删除? [复制]

如何将视图从纵向模式更改为横向模式并锁定它?

设备定向时如何失去输入焦点?

如何在 iPad 中检查设备方向从纵向到横向和反之亦然的变化 [重复]

按钮锁定到指南。为啥位置会随着方向变化?

如何根据设备方向制作横向或纵向照片[重复]