Các thiết bị TV yêu cầu một thiết bị phần cứng phụ để tương tác với các ứng dụng – một bộ điều khiển từ xa cơ bản hoặc tay điều khiển trò chơi. 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ý trường hợp bộ điều khiển ngoại tuyến và nhận đầu vào từ nhiều loại bộ điều khiển khác nhau.
Hướng dẫn này thảo luận về các yêu cầu đối với việc xử lý bộ điều khiển cho thiết bị TV.
Các chế độ điều khiển tối thiểu bằng d-pad
Bộ điều khiển mặc định cho thiết bị TV là một D-pad. Nhìn chung, ứng dụng của bạn phải hoạt động được với bộ điều khiển từ xa chỉ có các nút lên, xuống, trái, phải, chọn, quay lại và trang chủ. 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 với các nút điều khiển bổ sung, hãy cố gắng hỗ trợ lối chơi chỉ với 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 họ cần có tay điều khiển và cho phép họ thoát trò chơi một cách an toàn bằng tay điều khiển D-pad.
Để biết thêm thông tin về cách điều hướ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ý trường hợp bộ điều khiển bị ngắt kết nối
Tay điều khiển cho TV thường là thiết bị Bluetooth. Thiết bị này có thể cố gắng tiết kiệm pin bằng cách định kỳ chuyển sang chế độ ngủ và ngắt kết nối với thiết bị TV. Điều này có nghĩa là ứ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:
- Trong khi một video dài vài phút đang phát, bàn phím điều hướng (D-pad) hoặc tay cầm chơi game có thể chuyển sang chế độ ngủ, ngắt kết nối với thiết bị TV và kết nối lại sau đó.
- Trong khi chơi, một 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.
Mọi hoạt động của ứng dụng truyền hình chịu sự kiện ngắt kết nối và kết nối lại đều phải được định cấu hình để xử lý các sự kiện kết nối lại trong tệp kê khai ứng dụng. Đoạn 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ả việc kết nối, ngắt kết nối hoặc kết nối lạ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 sự kiện kết nối lại thay vì được khởi động lại bởi khung Android (điều này không mang lại trải nghiệm tốt cho người dùng).
Xử lý các biến thể của dữ liệu đầu vào bằng d-pad
Người dùng thiết bị truyền hình có thể có nhiều loại bộ điều khiển mà họ sử dụng với truyền hình. Ví dụ, người dùng có thể sở hữu cả bộ điều khiển D-pad cơ bản và tay điều khiển trò chơi. Mã phím được cung cấp bởi tay điều khiển trò chơi khi được sử dụng cho các chức năng D-pad có thể khác với mã phím được gửi bởi một D-pad cơ bản.
Xử lý các biến thể của 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ể 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 định hướng.
Xử lý sự kiện nút
Khi người dùng nhấp vào một nút trên bộ điều khiển, ứng dụng của bạn sẽ nhận được một sự kiện với KeyEvent. Hành vi dự kiến của nút 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 thuộc loại TV, chẳng hạn như chọn hoặc điều hướng. Để mang lại trải nghiệm người dùng tốt, hãy gán hành vi nhất quán cho các nút điều khiển.
Sự kiện trên giao diện người dùng của TV
Chỉ định hành vi của giao diện người dùng TV cho các nút tạo ra các loại KeyEvent như minh hoạ trong bảng sau:
KeyEvent | Hành vi |
|---|---|
KEYCODE_BUTTON_B, KEYCODE_BACK | Quay lại |
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER,
KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTER | Lựa chọn |
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT,
KEYCODE_DPAD_RIGHT | Điều hướng |
Sự kiện nội dung nghe nhìn
Khi người dùng đang xem nội dung nghe nhìn, hãy chỉ định hành vi cho các nút tạo ra các loại KeyEvent như 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 xuất hiện trong bảng. Lưu ý rằng các nút chọn hoạt động như các nút Phát hoặc Tạm dừng trong ngữ cảnh này.
KeyEvent | Gọi TransportControls | Hà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_R1 | skipToNext() | Chuyển tới mục tiếp theo |
BUTTON_L1 | skipToPrevious() | Chuyển về mục trước |
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER,
AXIS_THROTTLE | fastForward() | Tua đi |
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER,
AXIS_BRAKE | rewind() | Tua lại |
| Không áp dụng | stop() | Dừng |
Lưu ý: Khi bạn sử dụng MediaSession, đừng ghi đè việc 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 phù hợp cho nút Quay lại
Nút Quay lại không bao giờ được dùng làm nút chuyển đổi. Ví dụ: đừng dùng thao tác này để vừa mở vừa đóng một trình đơn. Chỉ sử dụng chức năng này để điều hướng ngược lại, theo kiểu "dấu vết bánh mì", qua các màn hình trước đó mà người chơi đã xem.
Vì nút Quay lại chỉ thực hiện thao tác điều hướng tuyến tính, lùi lại, nên bạn có thể dùng nút này để thoát khỏi một trình đơn trong ứng dụng do một nút khác mở và quay lại ứng dụng. Thao tá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 truyền hình > 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 phần Thiết kế hoạt động đ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 Cung cấp chức năng điều hướng quay lại phù hợp.
Xử lý tay điều khiển cho trò chơi
Hỗ trợ các nút điều hướng d-pad
Hãy thiết kế sơ đồ điều khiển của bạn dựa trên bộ điều khiển D-pad, vì đây là bộ điều khiển mặc định cho các thiết bị Android TV. Người chơi cần có thể sử dụng 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 trình đơn và quảng cáo. Vì lý do này, hãy đảm bảo rằng trò chơi Android TV của bạn không đề cập đến giao diện cảm ứng bằng ngôn ngữ như "Chạm vào đây để tiếp tục."
Cách bạn định hình tương tác của người chơi với bộ điều khiển có thể là yếu tố then chốt để mang lại trải nghiệm tuyệt vời cho người dùng. Hãy cân nhắc các phương pháp hay nhất sau đây:
- Thông báo trước các yêu cầu về bộ điều khiển: sử dụng nội dung mô tả trên Google Play để thông báo cho người chơi mọi kỳ vọng về bộ điều khiển. Nếu một trò chơi phù hợp hơn với tay điều khiển trò chơi có cần điều khiển hơn là tay điều khiển chỉ có D-pad, hãy nêu rõ điều này. Người chơi sử dụng bộ điều khiển không phù hợp cho một trò chơi có thể có trải nghiệm kém và đánh giá trò chơi của bạn ở mức thấp.
- Sử dụng mối liên kết nút nhất quán: mối liên kết nút trực quan là yếu tố quan trọng để mang lại trải nghiệm người dùng chất lượng. Ví dụ: tuân thủ các quy tắc được chấp nhận bằng cách dùng nút A để chấp nhận và nút B để huỷ. Bạn cũng có thể mang đến sự linh hoạt dưới dạng khả năng gán lại. Để biết thêm thông tin về việc ánh xạ nút, hãy xem phần Xử lý các thao tác của bộ điều khiển.
- Phát hiện các chức năng của bộ điều khiển và điều chỉnh cho phù hợp: truy vấn bộ điều khiển về các chức năng của bộ điều khiển để tối ưu hoá sự phù hợp giữa bộ điều khiển và trò chơi. Ví dụ: bạn có thể muốn người chơi điều khiển một đối tượng bằng cách vẫy bộ điều khiển trong không trung, nhưng nếu bộ đ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 sẽ không hoạt động. Truy vấn bộ điều khiển và nếu không hỗ trợ tính năng phát hiện chuyển động, hãy chuyển sang một sơ đồ điều khiển thay thế hiện có. Để biết thêm thông tin về cách truy vấn các chức năng của bộ đ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 các nút thích hợp
Không phải tay cầm chơi game nào cũng có nút Bắt đầu, Tìm kiếm hoặc Trình đơn. Đả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ó bộ điều khiển riêng, điều quan trọng là bạn phải liên kết từng cặp người chơi-bộ điều khiển. Để biết thông tin về cách triển khai tính năng nhận dạng số bộ điều khiển, hãy xem
getControllerNumber().
Xử lý trường hợp bộ điều khiển bị ngắt kết nối
Khi tay điều khiển bị ngắt kết nối trong lúc chơi, hãy tạm dừng trò chơi và hiện một hộp thoại nhắc người chơi bị 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 trình phát "Kiểm tra kết nối Bluetooth". Để biết thêm thông tin về việc triển khai hỗ trợ thiết bị đầu vào, hãy xem Xử lý các hành động của bộ điều khiển và Tổng quan về Bluetooth.
Hiện hướng dẫn về bộ điều khiển
Nếu trò chơi của bạn cung cấp hướng dẫn bằng hình ảnh về cách điều khiển trò chơi, hãy sử dụng hình ảnh tay điều khiển không có nội dung 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 bộ đ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 Android TV (ZIP) xuống. Tệp này bao gồm một tay cầm màu trắng trên nền đen và một tay cầm màu đen trên nền trắng (như trong hình 1) dưới dạng tệp PNG và tệp Adobe® Illustrator®.