java - Android OrientationEventListener 进行多次调用

标签 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
            }
        }
    };

问题是这个监听器被调用太多次,导致我的视​​频无法正常播放。与以前不同,该 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/

相关文章:

java - 用 BC 验证分离的签名

java - Math.IEEEremainder() 和 StrictMath.IEEEremainder() 之间的区别

java - GcmTaskService 不工作

android - 如何在android TextView 的任意一端插入文本?

visual-studio-2015 - gacutil.exe 在 Windows 10 中的什么位置?

android - 错误 : SWT folder '' does not exist. 请设置 ANDROID_SWT .. SDK 更新后出现此错误

java - 输入字符串并在每次单击按钮时添加到列表中,同时显示输入的所有字符串

java - BufferedOutputStream 未写入 standardIO

android - 自定义 View 不响应触摸

ios - Linkedin iOS 身份验证需要启动 Linkedin 应用程序