我的应用程序上有一个视频,我试图实现这一目标,当用户将设备从纵向旋转为横向时,视频会更改为全屏。
我正在使用OrientationEventListener
,如下所示:
orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
if (orientation <= 45 && playerManager.isFullscreen()) {
onPlayerFullscreenChange(false); //ORIENTATION_PORTRAIT
} else if (orientation <= 135 && !playerManager.isFullscreen()) {
onPlayerFullscreenChange(true); //ORIENTATION_LANDSCAPE
} else if (orientation <= 225 && playerManager.isFullscreen()) {
onPlayerFullscreenChange(false); //ORIENTATION_PORTRAIT
} else if (orientation <= 315 && !playerManager.isFullscreen()) {
onPlayerFullscreenChange(true); //ORIENTATION_LANDSCAPE
}
}
};
问题是这个监听器被调用太多次,导致我的视频无法正常播放。与以前不同,该 Activity 最终会多次抛出OnCreate
。
最佳答案
每次传感器检测到您握持 Android 设备的方式发生变化时,onOrientationChanged(intorientation) 方法都会通知您。
用户几乎不可能保持设备静止,因此 onOrientationChanged() 会被多次调用。
我从您的问题中了解到,您只想在用户水平握住设备时全屏显示视频。
因此,将 0-45、135-255 和 315-360 的角度值视为垂直。 并且,水平角度介于 45-135 和 225-315 之间。 如果您仔细思考一下,就会明白这一点。
存储“先前方向”,例如,如果您使用 String.然后将其与当前检测到的方向进行比较,如果不相同,则采取操作(将视频设置为全屏或反之亦然)并将当前方向值保存为“先前方向”。
这个问题实际上归结为更好地实现你的算法。祝一切顺利!
关于java - Android OrientationEventListener 进行多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51885586/