Пауза и возобновление воспроизведения мультимедиа с помощью клавиши пробела на внешней клавиатуре

Всякий раз, когда ваше приложение воспроизводит медиафайл, пользователи должны иметь возможность приостанавливать и возобновлять воспроизведение, нажимая клавишу пробела на физической клавиатуре.

Реагировать на события нажатия клавиш

Приложения на основе Jetpack Compose или представлений реагируют на нажатия клавиш клавиатуры аналогичным образом: приложение прослушивает события нажатия клавиш, фильтрует события и реагирует на нажатия клавиш, например на нажатие клавиши пробела .

1. Слушайте события клавиатуры

Сочинить

В Jetpack Compose используйте модификатор onPreviewKeyEvent или onKeyEvent в макете, который управляет нажатием клавиши:

Column(modifier = Modifier.onPreviewKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp) {
        ...
    }
    ...
})

или

Column(modifier = Modifier.onKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp) {
        ...
    }
    ...
})

Просмотры

В действии вашего приложения переопределите метод onKeyUp() :

Котлин

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
    ...
}

Ява

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    ...
}

Метод вызывается каждый раз при отпускании нажатой клавиши, поэтому он срабатывает ровно один раз для каждого нажатия клавиши.

2. Фильтрация нажатия клавиши пробела

Внутри методов-модификаторов Compose onPreviewKeyEvent и onKeyEvent или представлений метода onKeyUp() отфильтруйте KeyEvent.KEYCODE_SPACE , чтобы отправить правильное событие в ваш медиа-компонент:

Сочинить

Column(modifier = Modifier.onPreviewKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
        ...
    }
    ...
})

или

Column(modifier = Modifier.onKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
        ...
    }
    ...
})

Просмотры

Котлин

if (keyCode == KeyEvent.KEYCODE_SPACE) {
    togglePlayback()
    return true
}
return false

Ява

if (keyCode == KeyEvent.KEYCODE_SPACE) {
    togglePlayback();
    return true;
}
return false;

Ключевые моменты

  • KEYCODE_SPACE : константа кода клавиши для клавиши пробела .

Сочинить

  • onPreviewKeyEvent : модификатор, который позволяет компоненту перехватывать события аппаратных клавиш, когда он (или один из его дочерних элементов) находится в фокусе.
  • onKeyEvent : Аналогично onPreviewKeyEvent , модификатор, который позволяет компоненту перехватывать события аппаратных клавиш, когда компонент (или один из его дочерних элементов) находится в фокусе.

Просмотры

  • onKeyUp() : обработчик событий, вызываемый при отпускании клавиши и не обрабатываемый представлением (например, TextView ) внутри действия.

Результаты

Теперь ваше приложение может реагировать на нажатие клавиши пробела , чтобы приостановить и возобновить воспроизведение видео или другого мультимедиа.