在我的应用程序中,我已经设置了纵向的首选方向
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);