【问题标题】:Android OrientationEventListener making to many callsAndroid OrientationEventListener 拨打许多电话
【发布时间】:2018-08-16 21:29:37
【问题描述】:

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

我正在像这样使用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

【问题讨论】:

    标签: java android sdk orientation android-sensors


    【解决方案1】:

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

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

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

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

    存储“以前的方向”,例如,如果您使用字符串,您可以将其初始设置为 null。然后将其与当前检测到的方向进行比较,如果它们不一样,则执行一个操作(将视频设置为全屏,反之亦然)并将当前的方向值保存为“先前的方向”。

    这个问题实际上归结为更好地实现您的算法。万事如意!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多