如何在纵向锁定设备时获取设备方向
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);
【讨论】:
以上是关于如何在纵向锁定设备时获取设备方向的主要内容,如果未能解决你的问题,请参考以下文章
在移动设备上,如何在屏幕方向为横向时显示叠加层并在纵向时将其删除? [复制]