Android TV

Thao tác di chuyển 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 hướng 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 việc 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 nút điều khiển phát và bỏ qua quảng cáo. Hãy cân nhắ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 dùng Compose trên Android TV, bạn cần làm cho AndroidView có thể lấy tiêu điểm và uỷ quyền sự kiện bằng cách truyền tham số sửa đổi vào AndroidView cho phù hợp:

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ì chế độ điều hướng bằng D-pad sẽ được hỗ trợ theo mặc định. Các thành phần PlayerPlayerDefaults có một thực thể FocusRequester tự động duyệt qua 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 về tiêu điểm và phím:

Các 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 trở nên trực quan. Đối với mọi hoạt động tuỳ chỉnh và ghi đè 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 có chứa các nút, đều quản lý tiêu điểm ngay từ đầu.