Quản lý bộ điều khiển TV

Thiết bị TV cần có thiết bị phần cứng phụ để tương tác với ứng dụng – bộ điều khiển từ xa hoặc tay điều khiển trò chơi cơ bản. Do đó, ứng dụng của bạn phải hỗ trợ phương thức nhập bằng bàn phím di chuyển (D-pad). Ngoài ra, ứng dụng của bạn có thể cần phải xử lý các bộ điều khiển có kết nối mạng và nhập dữ liệu từ nhiều loại bộ điều khiển.

Hướng dẫn này thảo luận các yêu cầu đối với việc xử lý tay điều khiển cho thiết bị TV.

Các nút điều khiển tối thiểu trên D-pad

Bộ điều khiển mặc định của thiết bị TV là D-pad. Nhìn chung, ứng dụng của bạn phải hoạt động được trên một bộ điều khiển từ xa chỉ có các nút mũi tên lên, xuống, trái, phải, chọn, Quay lại và Màn hình chính. Nếu ứng dụng của bạn là một trò chơi thường yêu cầu tay điều khiển trò chơi có các nút điều khiển bổ sung, hãy cố gắng chỉ hỗ trợ việc chơi bằng các nút điều khiển này trên D-pad. Nếu không, hãy cảnh báo người dùng rằng cần có tay điều khiển và cho phép họ thoát khỏi trò chơi một cách dễ dàng bằng bộ điều khiển D-pad.

Để biết thêm thông tin về cách thao tác bằng bộ điều khiển D-pad cho thiết bị TV, hãy xem bài viết Thao tác trên TV.

Xử lý việc ngắt kết nối bộ điều khiển

Bộ điều khiển cho TV thường là các thiết bị Bluetooth. Bộ điều khiển này có thể tìm cách tiết kiệm điện năng bằng cách định kỳ chuyển sang chế độ ngủ và ngắt kết nối khỏi thiết bị TV. Điều này có nghĩa là một ứng dụng có thể bị gián đoạn hoặc khởi động lại nếu ứng dụng đó không được định cấu hình để xử lý các sự kiện kết nối lại này. Những sự kiện này có thể xảy ra trong bất kỳ trường hợp nào sau đây:

  • Khi video dài vài phút mới phát, D-pad hoặc tay điều khiển trò chơi có thể chuyển sang chế độ ngủ, ngắt kết nối khỏi thiết bị TV rồi kết nối lại sau.
  • Trong quá trình chơi, người chơi mới có thể tham gia trò chơi bằng tay điều khiển trò chơi chưa được kết nối.
  • Trong khi chơi, người chơi có thể rời khỏi trò chơi và ngắt kết nối tay điều khiển trò chơi.

Bạn phải định cấu hình mọi hoạt động trong ứng dụng TV có thể bị ngắt kết nối và kết nối lại để xử lý các sự kiện kết nối lại trong tệp kê khai ứng dụng. Mã mẫu sau đây minh hoạ cách bật một hoạt động để xử lý các thay đổi về cấu hình, bao gồm cả việc kết nối, ngắt kết nối hoặc kết nối lại với bàn phím hoặc thiết bị điều hướng:

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

Thay đổi cấu hình này cho phép ứng dụng tiếp tục chạy thông qua một sự kiện kết nối lại – thay vì được khung Android khởi động lại. Đây không phải là trải nghiệm tốt cho người dùng.

Xử lý các biến thể phương thức nhập bằng D-pad

Người dùng thiết bị TV có thể dùng nhiều loại bộ điều khiển cho TV. Ví dụ: người dùng có thể có cả tay điều khiển D-pad cơ bản và tay điều khiển trò chơi. Mã phím do tay điều khiển trò chơi cung cấp khi đang dùng cho các chức năng của D-pad có thể khác với mã phím do D-pad cơ bản gửi.

Xử lý các biến thể trong phương thức nhập bằng D-pad để người dùng không phải chuyển đổi bộ điều khiển để vận hành ứng dụng của bạn. Để biết thêm thông tin về cách xử lý các biến thể đầu vào, hãy xem nội dung Xử lý phương thức nhập bằng bàn phím di chuyển.

Xử lý sự kiện nút

Khi người dùng nhấp vào một nút trên tay điều khiển, ứng dụng của bạn sẽ nhận được một sự kiện có KeyEvent. Hành vi mong muốn của nút này có thể là một sự kiện đa phương tiện, chẳng hạn như phát, tạm dừng hoặc dừng, hoặc có thể là một sự kiện loại TV, chẳng hạn như lựa chọn hoặc thao tác. Để mang lại trải nghiệm tốt cho người dùng, hãy chỉ định hành vi nhất quán cho các nút điều khiển.

Sự kiện giao diện người dùng TV

Gán hành vi giao diện người dùng TV cho các nút tạo loại KeyEvent như minh hoạ trong bảng sau:

KeyEventHành vi
KEYCODE_BUTTON_B, KEYCODE_BACKQuay lại
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTERLựa chọn
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHTThao tác

Sự kiện truyền thông

Khi người dùng đang xem nội dung nghe nhìn, hãy gán hành vi cho các nút tạo loại KeyEvent như minh hoạ trong bảng sau. Nếu ứng dụng của bạn đang điều khiển MediaSession, hãy dùng MediaControllerAdapter để gọi một trong các phương thức MediaControllerCompat.TransportControls như trong bảng. Xin lưu ý rằng các nút lựa chọn hoạt động như nút Phát hoặc Tạm dừng trong ngữ cảnh này.

KeyEventLệnh gọi TransportControlsHành vi
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER play()Phát
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER pause()Tạm dừng
BUTTON_R1skipToNext()Chuyển tới mục tiếp theo
BUTTON_L1skipToPrevious()Chuyển về mục trước
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLEfastForward()Tua đi
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKErewind()Tua lại
Không áp dụngstop()Dừng

Lưu ý: Khi bạn sử dụng MediaSession, không ghi đè cách xử lý các nút dành riêng cho nội dung nghe nhìn, chẳng hạn như KEYCODE_MEDIA_PLAY hoặc KEYCODE_MEDIA_PAUSE. Hệ thống sẽ tự động kích hoạt phương thức MediaSession.Callback thích hợp.

Cung cấp hành vi thích hợp cho nút Quay lại

Nút Quay lại tuyệt đối không được hoạt động như một nút bật/tắt. Ví dụ: không sử dụng thanh công cụ này để mở và đóng một trình đơn. Chỉ sử dụng thanh này để điều hướng lùi lại theo kiểu breadcrumb (tập hợp liên kết phân cấp) thông qua các màn hình trước đó mà trình phát đã truy cập.

Vì nút Quay lại chỉ thực hiện thao tác điều hướng lui theo đường thẳng, nên bạn có thể dùng nút này để mở một trình đơn trong ứng dụng bằng một nút khác rồi quay lại ứng dụng. Việc nhấn nút Quay lại liên tục phải luôn dẫn đến màn hình chính của Android TV. Ví dụ: chơi trò chơi > màn hình tạm dừng trò chơi > màn hình chính của trò chơi > Màn hình chính của Android TV hoặc phát chương trình truyền hình > Màn hình chính của ứng dụng TV > Màn hình chính của Android TV.

Để biết thêm thông tin về thiết kế cho hoạt động điều hướng, hãy xem nội dung Thiết kế tính năng điều hướng Quay lại và Lên trên. Để tìm hiểu cách triển khai, hãy tham khảo bài viết Cung cấp tính năng điều hướng quay lại phù hợp.

Tay điều khiển trò chơi

Hỗ trợ các nút điều khiển trên D-pad

Hãy lập sơ đồ điều khiển xoay quanh một bộ điều khiển D-pad, vì bộ điều khiển này là bộ điều khiển mặc định cho các thiết bị Android TV. Người chơi cần sử dụng được D-pad cho mọi khía cạnh của trò chơi, không chỉ điều khiển lối chơi cốt lõi mà còn điều hướng được các trình đơn và quảng cáo. Vì lý do này, hãy đảm bảo trò chơi trên Android TV không tham chiếu đến giao diện cảm ứng có ngôn ngữ như "Nhấn vào đây để tiếp tục".

Cách bạn định hình hoạt động tương tác của người chơi với tay điều khiển có thể là chìa khoá để đạt được trải nghiệm người dùng tuyệt vời. Hãy cân nhắc các phương pháp hay nhất sau đây:

  • Truyền đạt trước các yêu cầu về tay điều khiển: sử dụng phần mô tả trên Google Play để cho người chơi biết mọi kỳ vọng của bạn về tay điều khiển. Nếu một trò chơi phù hợp với tay điều khiển trò chơi có cần điều khiển hơn là trò chơi chỉ có D-pad, hãy làm rõ điều này. Nếu một người chơi sử dụng tay điều khiển không phù hợp cho một trò chơi, họ có thể có trải nghiệm không tốt và khiến trò chơi của bạn bị xếp hạng thấp.
  • Sử dụng cách ánh xạ nút nhất quán: ánh xạ nút trực quan là chìa khoá để mang lại trải nghiệm tốt cho người dùng. Ví dụ: tuân thủ các quy tắc hải quan đã chấp nhận bằng cách sử dụng nút A để chấp nhận và nút B để huỷ. Bạn cũng có thể cung cấp tính linh hoạt ở hình thức khả năng ánh xạ lại. Để biết thêm thông tin về cách liên kết nút, hãy xem bài viết Xử lý các thao tác của bộ điều khiển.
  • Phát hiện chức năng của tay điều khiển và điều chỉnh cho phù hợp: truy vấn tay điều khiển về các chức năng của tay điều khiển đó để tối ưu hoá mức độ trùng khớp giữa tay điều khiển và trò chơi. Ví dụ: có thể bạn có ý định để người chơi điều khiển một đối tượng bằng cách vẫy bộ điều khiển trên không, nhưng nếu tay điều khiển của người chơi thiếu phần cứng gia tốc kế và con quay hồi chuyển, thì tính năng vẫy tay sẽ không hoạt động. Truy vấn bộ điều khiển và nếu tính năng phát hiện chuyển động không được hỗ trợ, hãy chuyển sang một sơ đồ điều khiển thay thế có sẵn. Để biết thêm thông tin về khả năng truy vấn bộ điều khiển, hãy xem bài viết Hỗ trợ bộ điều khiển trên các phiên bản Android.

Sử dụng các nút thích hợp

Không phải tay điều khiển trò chơi nào cũng cung cấp nút Bắt đầu, Tìm kiếm hoặc Trình đơn. Hãy đảm bảo giao diện người dùng của bạn không phụ thuộc vào việc sử dụng các nút này.

Xử lý nhiều bộ điều khiển

Khi nhiều người chơi đang chơi một trò chơi, mỗi người chơi có tay điều khiển riêng, điều quan trọng là phải liên kết từng cặp người chơi và người điều khiển. Để biết thông tin về cách triển khai hoạt động nhận dạng số của đơn vị kiểm soát, hãy xem getControllerNumber().

Xử lý việc ngắt kết nối bộ điều khiển

Khi tay điều khiển bị ngắt kết nối trong quá trình chơi, hãy tạm dừng trò chơi và hiện hộp thoại nhắc người chơi đã ngắt kết nối kết nối lại tay điều khiển.

Ngoài ra, hãy đưa ra các mẹo khắc phục sự cố trong hộp thoại. Ví dụ: yêu cầu trình phát "Kiểm tra kết nối Bluetooth của bạn". Để biết thêm thông tin về cách triển khai tính năng hỗ trợ thiết bị đầu vào, hãy xem bài viết Xử lý các thao tác của bộ điều khiển và bài viết Tổng quan về Bluetooth.

Hiện hướng dẫn tay điều khiển

Nếu trò chơi của bạn cung cấp hướng dẫn điều khiển trò chơi bằng hình ảnh, hãy sử dụng hình ảnh tay điều khiển không có thương hiệu và chỉ bao gồm các nút tương thích với Android.

Để xem hình ảnh mẫu của một tay điều khiển tương thích với Android, hãy tải Mẫu tay điều khiển trò chơi (ZIP) dành cho Android TV xuống. Lớp này bao gồm một bộ điều khiển màu trắng trên nền đen và một bộ điều khiển màu đen trên nền trắng (như trong hình 1) dưới dạng tệp PNG và dưới dạng tệp Adobe® Illustrator®.

Hình 1. Ví dụ về hướng dẫn tay điều khiển bằng Mẫu tay điều khiển trò chơi dành cho Android TV.