외부 키보드 스페이스바를 사용하여 미디어 재생 일시중지 및 다시 시작

앱에서 미디어 파일을 재생할 때마다 사용자는 실제 키보드에서 스페이스바를 눌러 재생을 일시중지하거나 재개할 수 있어야 합니다.

키 누르기 이벤트에 응답

Jetpack Compose 또는 뷰를 기반으로 하는 앱은 키보드 키 누름에 비슷한 방식으로 응답합니다. 앱은 키 누름 이벤트를 수신 대기하고, 이벤트를 필터링하고, 스페이스바 키 누름과 같은 키 누름에 응답합니다.

1. 키보드 이벤트 수신 대기

Compose

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() 메서드를 재정의합니다.

Kotlin

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

자바

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

이 메서드는 눌린 키가 해제될 때마다 호출되므로 키 입력마다 정확하게 한 번씩 실행됩니다.

2. 스페이스바 누르기 필터링

Compose onPreviewKeyEventonKeyEvent 수정자 메서드 또는 뷰 onKeyUp() 메서드 내에서 KeyEvent.KEYCODE_SPACE를 필터링하여 올바른 이벤트를 미디어 구성요소에 전송합니다.

Compose

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) {
        ...
    }
    ...
})

Kotlin

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

자바

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

핵심사항

Compose

  • onPreviewKeyEvent: 구성요소 (또는 그 하위 요소 중 하나)에 포커스가 있을 때 구성요소에서 하드웨어 키 이벤트를 가로채도록 하는 수정자입니다.
  • onKeyEvent: onPreviewKeyEvent와 마찬가지로 구성요소 (또는 그 하위 요소 중 하나)에 포커스가 있을 때 구성요소에서 하드웨어 키 이벤트를 가로채도록 하는 특수키입니다.

  • onKeyUp(): 키가 해제되었으며 활동 내의 뷰 (예: TextView)에서 처리되지 않을 때 호출되는 이벤트 핸들러입니다.

결과

이제 앱이 스페이스바 키를 누를 때 이에 응답하여 동영상이나 다른 미디어를 일시중지하거나 재개할 수 있습니다.