使用" PROXIMITY_SCREEN_OFF_WAKE_LOCK"触摸事件UP在不应该被触发时被触发激活锁定

时间:2014-10-27 19:05:21

标签: android xamarin ontouchevent wakelock proximity

我这里有一个非常奇怪的问题。 (在设备上运行,摩托罗拉XT910 Android 4.1.2,Xamarin.Android 4.16.0)

我有一个带有按钮的活动,用户按下按钮来录制一些音频。我处理onTouch事件并听DOWN和UP事件(在DOWN我开始录制,在UP我停止它)。到现在为止还挺好。 现在,我还处理onSensorChanged事件,以便在用户将设备放在他耳边时关闭屏幕。我通过使用这样的唤醒锁来实现这一点:

private void AcquireScreenWakeLock()
    {
        if (screenWakeLock == null) {
            PowerManager pm = (PowerManager)GetSystemService (Context.PowerService);
            field = pm.Class.GetField ("PROXIMITY_SCREEN_OFF_WAKE_LOCK").GetInt (null);
            screenWakeLock = pm.NewWakeLock ((WakeLockFlags)field, "ScreenWakeLock");
        }
        screenWakeLock.Acquire();
    }

private void ReleaseScreenWakeLock()
    {
        if (screenWakeLock == null)
            return;
        if (screenWakeLock.IsHeld)
            screenWakeLock.Release();
    }

按下并按住按钮进行录制时出现问题,在DOWN事件发生后,我收到UP事件而不抬起手指...... 当然,我之间还有其他一些事情,但我设法将问题缩小到这个代码(如果我评论它一切都按预期工作)。

我知道我正在使用隐藏字段来制作wakeLock(实际上它似乎已在API 21中发布,文档here)但我还没有找到更好的方法来做到这一点,而且整个屏幕关闭/开启过程完美无瑕。 我在运行Android 4.1.2的摩托罗拉XT910上进行测试时遇到了这个问题,我在运行Android 4.4.4的Moto G上进行了测试,一切正常(按住按钮时没有UP事件被激活)

我真的不知道这里搞清楚......唤醒锁如何导致这种行为?你还有其他方法可以有效地关闭/打开屏幕吗?我搜索了其他帖子,但似乎没有人帮助我。使用部分wakeLock也不起作用(我已使用此code进行了检查)。 提前谢谢!

P.S:我已经检查过,触摸事件只被注册一次。

1 个答案:

答案 0 :(得分:0)

PROXIMITY_SCREEN_OFF_WAKE_LOCK根据接近状态自行关闭/打开屏幕。无需处理onSensorChanged事件。这可能会导致问题。