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

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

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

Приложения, основанные на 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 {
    ...
}

Java

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

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

2. Фильтр нажатий пробела

Внутри методов onPreviewKeyEvent и onKeyEvent модификатора Compose или в методе 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

Java

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

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

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

Сочинить

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

Мнения

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

Результаты

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