Событие Touch UP запускается, когда этого не требуется, после использования PROXIMITY_SCREEN_OFF_WAKE_LOCK wakelock

У меня действительно странная проблема. (Работает на устройстве, Motorola XT910 Android 4.1.2, Xamarin.Android 4.16.0)

У меня есть действие с кнопкой, которую пользователь нажимает и удерживает, чтобы записать звук. Я обрабатываю событие onTouch и слушаю события DOWN и UP (на DOWN я начинаю запись, на UP я останавливаю ее). Все идет нормально. Теперь я также обрабатываю событие onSensorChanged, чтобы выключить экран, когда пользователь подносит устройство к уху. Я достигаю этого, используя wakelock следующим образом:

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, docs здесь), но я не нашел лучшего способа сделать это, и весь процесс выключения/включения экрана работает безупречно. У меня возникла эта проблема во время тестирования на Motorola XT910 под управлением Android 4.1.2, я тестировал ее на Moto G под управлением Android 4.4.4, и там все работает нормально (события UP не запускаются при удерживании кнопки) .

Я действительно в недоумении, пытаясь понять это ... как wakelock может вызвать такое поведение? У вас есть другой способ эффективно выключить / включить экран? Я искал другие сообщения, но ни один из них, похоже, не помог мне. Использование частичного wakeLock также не работает (я проверил этот код < /а>). Заранее спасибо!

PS: я проверил, и событие касания регистрируется только один раз.


person guitarger    schedule 27.10.2014    source источник
comment
это как-то связано с тем, что активность переходит в состояние onPause, когда экран гаснет?   -  person behelit    schedule 23.06.2016


Ответы (1)


PROXIMITY_SCREEN_OFF_WAKE_LOCK самостоятельно выключает/включает экран в зависимости от состояния близости. Нет необходимости обрабатывать также событие onSensorChanged. Это может вызвать проблему.

person Igor Gorjanc    schedule 08.06.2015