Android TV

Thao tác bằng d-pad trên Android TV

Điều khiển từ xa của Android TV có một nút điều khiển D-pad để gửi các lệnh đến dưới dạng sự kiện chính tại dispatchKeyEvent(KeyEvent) của Activity. Bạn cần uỷ quyền những quyền này cho PlayerView:

Kotlin

override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
  return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event)
}

Java

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

Việc yêu cầu tiêu điểm cho PlayerView là rất quan trọng để điều hướng các chế độ điều khiển phát và bỏ qua quảng cáo. Hãy cân nhắc việc yêu cầu lấy tiêu điểm trong onCreate của Activity:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView.requestFocus()
  // ...
}

Java

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // ...
  playerView.requestFocus();
  // ...
}

Nếu đang sử dụng Compose trên Android TV, bạn cần đặt AndroidView ở trạng thái có thể làm tâm điểm và uỷ quyền sự kiện bằng cách truyền tham số đối tượng sửa đổi vào AndroidView tương ứng:

AndroidView(
  modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
  factory = { playerView },
)

Sử dụng thành phần kết hợp Player

Nếu bạn sử dụng thành phần kết hợp Player trong thư viện media3-ui-compose-material3, thì tính năng điều hướng bằng D-pad sẽ được hỗ trợ theo mặc định. Các thành phần Player và PlayerDefaults có một thực thể FocusRequester tự động truyền tải các thành phần bằng D-pad, vì vậy, bạn không cần thêm mã hoặc Modifier.focusRequester để xử lý các sự kiện chính và tiêu điểm:

PlayerDefaults được sắp xếp ở các vị trí trên cùng, giữa và dưới cùng để thao tác điều hướng bằng D-pad mang lại cảm giác trực quan. Đối với mọi hoạt động tuỳ chỉnh và ghi đè cho các vị trí đó, hãy đảm bảo bạn cung cấp một thành phần dễ điều hướng. Xin lưu ý rằng hầu hết các thành phần Compose, chẳng hạn như Slider hoặc Row chứa các nút, đều quản lý tiêu điểm ngay từ đầu.