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

Thiết bị TV cần có một thiết bị phần cứng phụ để tương tác với ứng dụng, như một 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 xử lý các bộ điều khiển chuyển sang chế độ ngoại tuyến và nhập dữ liệu từ nhiều loại tay điều khiển.

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

Các chế độ điều khiển tối thiểu của D-pad

Bộ điều khiển mặc định cho 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à trò chơi thường yêu cầu tay điều khiển trò chơi có các chế độ điều khiển bổ sung, hãy thử hỗ trợ lối chơi chỉ bằng các nút điều khiển D-pad này. Nếu không, hãy cảnh báo người dùng rằng cần phải có tay điều khiển và cho phép họ thoát khỏi trò chơi của bạn một cách linh hoạt bằng cách sử dụng bộ điều khiển D-pad.

Để biết thêm thông tin về cách xử lý việc chỉ đường bằng bộ điều khiển D-pad cho thiết bị TV, hãy xem phần Điều hướng 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à thiết bị Bluetooth. Do đó, có thể tìm cách tiết kiệm pin 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 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 một video dài vài phút phát xong, 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 khi 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 cho phép một hoạt động xử lý các thay đổi về cấu hình, bao gồm cả bàn phím hoặc thiết bị điều hướng kết nối, ngắt kết nối hoặc kết nối lại:

<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>

Việc 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ì khởi động lại bằng khung Android (đây không phải là một trải nghiệm tốt cho người dùng).

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

Người dùng thiết bị TV có thể sử dụng nhiều loại bộ điều khiển để sử dụng với 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 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 tay đ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ể của phương thức nhập, hãy xem phần Xử lý phương thức nhập bằng bàn phím di chuyển.

Xử lý các sự kiện của 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 dự kiến cho nút này có thể là một sự kiện đa phương tiện (như phát, tạm dừng hoặc dừng) hoặc có thể là một sự kiện kiểu TV, chẳng hạn như lựa chọn hoặc điều hướng. Để 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 trên tay điều khiển.

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

Chỉ định hành vi của giao diện người dùng TV cho các nút tạo ra 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 kiểm soát một MediaSession, hãy dùng MediaControllerAdapter để gọi một trong các phương thức MediaControllerCompat.TransportControls hiển thị 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, đừ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 của nút Quay lại

Nút Quay lại không được hoạt động như một nút bật/tắt. Ví dụ: không sử dụng thao tác này để mở vừa đóng một trình đơn. Chỉ sử dụng thuộc tính này để di chuyển ngược 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à người chơi đã truy cập.

Vì nút Quay lại chỉ thực hiện thao tác điều hướng tuyến tính, ngược lại, nên bạn có thể dùng nút này để rời khỏi trình đơn trong ứng dụng được mở bằng một nút khác rồi quay lại ứng dụng. Việc nhấn liên tục nút Quay lại cuối cùng 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 điều hướng, hãy xem bài viết Thiết kế điều hướng Quay lại và Lên. Để tìm hiểu về cách triển khai, hãy tham khảo phần Cung cấp tính năng điều hướng quay lại đúng cách.

Xử lý tay điều khiển cho trò chơi

Hỗ trợ bộ điều khiển D-pad

Hãy lập sơ đồ điều khiển xoay quanh 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ỉ kiểm soát lối chơi cốt lõi mà còn điều hướng 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 của bạn 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à yếu tố then chốt để mang đến trải nghiệm chất lượng cao cho người dùng. Hãy cân nhắc các phương pháp hay nhất sau đây:

  • Trao đổi trước các yêu cầu về tay điều khiển: sử dụng nội dung mô tả trên Google Play để cho người chơi biết mọi kỳ vọng của họ về tay điều khiển. Nếu 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. Người chơi sử dụng tay điều khiển không phù hợp cho trò chơi có thể có trải nghiệm không tốt và xếp hạng trò chơi của bạn theo điểm xếp hạng kém.
  • Sử dụng á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ụ: hãy tuân thủ các quy định được 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ể linh hoạt về hình thức gán lại. Để biết thêm thông tin về ánh xạ nút, hãy xem bài viết Xử lý 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ề khả năng của tay điều khiển đó để tối ưu hoá sự phù hợp giữa tay điều khiển và trò chơi. Ví dụ: có thể bạn có ý định cho người chơi điều khiển một vật thể bằng cách vẫy tay điều khiển trong không trung. Tuy nhiên, 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ì thao tác vẫy tay sẽ không hoạt động. Truy vấn bộ điều khiển. 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 giao thức điều khiển thay thế có sẵn. Để biết thêm thông tin về cách truy vấn các chức năng của tay điều khiển, hãy xem phần Hỗ trợ bộ điều khiển trên các phiên bản Android.

Sử dụng 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 các 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 cùng chơi một trò chơi, mỗi người có tay điều khiển riêng, quan trọng là bạn phải liên kết từng cặp người chơi-người điều khiển. Để biết thông tin về cách triển khai tính năng nhận dạng số tay điều khiển, 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 giữa chừng đang 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 cung cấp các mẹo khắc phục sự cố trong hộp thoại. Ví dụ: yêu cầu người chơi "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ý thao tác của bộ điều khiểnTổng quan về Bluetooth.

Hiển thị hướng dẫn dành cho 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) cho Android TV xuống. Tệ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 sử dụng tay điều khiển trò chơi dành cho Android TV.