使用外接鍵盤的空格鍵暫停及繼續播放媒體

每當應用程式播放媒體檔案時,使用者應該只需按下實體鍵盤上的空格鍵,就能暫停並繼續播放。

回應按鍵事件

以 Jetpack Compose 或 View 為基礎的應用程式,會以類似的方式回應按下鍵盤按鍵的事件:應用程式會監聽按鍵事件、篩選事件,以及回應按鍵事件 (例如按下空格鍵的事件)。

1. 監聽鍵盤事件

Compose

透過 Jetpack Compose,在管理按鍵操作的版面配置中使用 onPreviewKeyEventonKeyEvent 修飾符:

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

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

Views

在應用程式的活動中,覆寫 onKeyUp() 方法:

Kotlin

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

Java

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

Views

Kotlin

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

Java

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

重點

Compose

  • onPreviewKeyEvent:修飾符,可讓元件 (或其中一個子項) 在成為焦點時,攔截硬體的按鍵事件。
  • onKeyEvent:與 onPreviewKeyEvent 類似,這個修飾符可讓元件 (或其中一個子項) 在成為焦點時,攔截硬體的按鍵事件。

Views

  • onKeyUp():在按鍵鬆開,且非由活動中的檢視畫面 (例如 TextView) 處理時呼叫的事件處理常式。

結果

對於按下空格鍵來暫停並繼續播放影片/其他媒體這類事件,您的應用程式現在可以做出回應。