Android OrientationEventListener进行多次通话

时间:2018-08-16 21:29:38

标签: java android sdk orientation android-sensors

我的应用上有一个视频,当用户将设备从纵向旋转到横向时,我试图做到这一点。视频会变为全屏显示。

我这样使用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
            }
        }
    };

问题在于此监听器被调用了很多次,导致我的视​​频无法正常播放。与以前不同,该活动最终多次抛出OnCreate

1 个答案:

答案 0 :(得分:0)

每次传感器检测到您握持Android设备的方式发生变化时,onOrientationChanged(int orientation)方法都会通知您。

用户几乎不可能将设备保持静止,因此onOrientationChanged()被多次调用。

我从您的问题中了解到,您只想在用户水平握住设备时以全屏显示视频。

因此将0-45、135-255和315-360的角度值视为“垂直”。 并且,水平角度在45-135和225-315之间。 如果您考虑一下,这将是有道理的。

存储“先前方向”,例如,如果使用String,则可以将其初始设置为null。然后将其与当前检测到的方向进行比较,如果不一致,则采取措施(将视频设置为全屏,反之亦然),然后将当前方向值保存为“以前的方向”。

这个问题实际上归结为更好地实现您的算法。祝一切顺利!