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



在我的应用程序中,我已经设置了纵向的首选方向

SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
])

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

我想要监听方向变化即使它被锁定

我想要一些等价的代码

MediaQuery.of(context).orientation

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

你可以使用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);

你也可以通过其他方式检查这篇文章:获得手机方向,但将屏幕方向固定为纵向

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

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

最新更新