Một thiết bị đeo thường chứa nhiều nút vật lý, còn gọi là _stems_. Thiết bị Wear OS luôn có ít nhất 1 nút: đó là nút nguồn. Ngoài ra, có thể không có hoặc có nhiều nút đa chức năng.
Trong ứng dụng của mình, bạn có thể gán các nút đa chức năng cho các thao tác. Ví dụ: một ứng dụng thể dục có thể bắt đầu hoặc tạm dừng bài tập thể dục bằng các nút đa chức năng:
![](https://developer.android.com/static/wear/images/multi_function_buttons.png?authuser=5&hl=vi)
Lưu ý: Wear OS 3.0 chỉ dành riêng 2 nút cho hệ điều hành trong khi Wear OS 2.0 chỉ dành có một nút. Việc này giúp giảm số lượng nút bạn có thể gán cho các thao tác.
Để biết các trường hợp sử dụng và cân nhắc phù hợp về thiết kế, hãy xem Nguyên tắc thiết kế cho Wear OS.
Hướng dẫn này mô tả cách truy xuất thông tin về các nút đa chức năng có sẵn trên thiết bị và cách xử lý các thao tác nhấn nút.
Siêu dữ liệu về nút
Để biết thêm thông tin về các nút trên một thiết bị, hãy sử dụng API được xác định trong thư viện AndroidX dành cho Wear Input. Thêm phần phụ thuộc sau vào tệp build.gradle
của mô-đun ứng dụng:
dependencies { implementation "androidx.wear:wear-input:1.0.0" }
Số nút
Để tìm hiểu số lượng nút có trên thiết bị, hãy sử dụng phương thức WearableButtons.getButtonCount()
. Phương thức này bao gồm nút nguồn. Vì vậy, nếu phương thức này trả về một giá trị lớn hơn 1, thì bạn có thể dùng các nút đa chức năng. Để có chính xác số nút đa chức năng có thể chỉ định, hãy trừ đi một nút, vì nút đầu tiên luôn là nút nguồn.
Mã phím cho các thao tác nhấn nút
Mỗi nút được liên kết với một hằng số int
từ lớp KeyEvent
, như minh hoạ trong bảng sau:
Nút | Sự kiện quan trọng |
---|---|
Nút đa chức năng 1 | KEYCODE_STEM_1
|
Nút đa chức năng 2 | KEYCODE_STEM_2
|
Nút đa chức năng 3 | KEYCODE_STEM_3
|
Mã ví dụ sau đây cho thấy cách lấy số nút có sẵn:
Kotlin
val count = WearableButtons.getButtonCount(context) if (count > 1) { // There are multifunction buttons available } val buttonInfo = WearableButtons.getButtonInfo(activity, KeyEvent.KEYCODE_STEM_1) if (buttonInfo == null) { // KEYCODE_STEM_1 is unavailable } else { // KEYCODE_STEM_1 is present on the device }
Java
int count = WearableButtons.getButtonCount(context); if (count > 1) { // There are multifunction buttons available } WearableButtons.ButtonInfo buttonInfo = WearableButtons.getButtonInfo(activity, KeyEvent.KEYCODE_STEM_1); if (buttonInfo == null) { // KEYCODE_STEM_1 is unavailable } else { // KEYCODE_STEM_1 is present on the device }
Xử lý thao tác nhấn nút
Ứng dụng của bạn có thể xử lý một số mã phím nút có thể xử lý:
-
KEYCODE_STEM_1
-
KEYCODE_STEM_2
-
KEYCODE_STEM_3
Ứng dụng có thể nhận được các mã phím này và chuyển đổi chúng thành các hành động cụ thể trong ứng dụng.
Để xử lý một thao tác nhấn nút, hãy triển khai phương thức onKeyDown()
.
Ví dụ: cách triển khai này phản hồi thao tác nhấn nút để kiểm soát các hành động trong một ứng dụng:
Kotlin
// Activity override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { return if (event.repeatCount == 0) { when (keyCode) { KeyEvent.KEYCODE_STEM_1 -> { // Do stuff true } KeyEvent.KEYCODE_STEM_2 -> { // Do stuff true } KeyEvent.KEYCODE_STEM_3 -> { // Do stuff true } else -> { super.onKeyDown(keyCode, event) } } } else { super.onKeyDown(keyCode, event) } }
Java
@Override // Activity public boolean onKeyDown(int keyCode, KeyEvent event){ if (event.getRepeatCount() == 0) { if (keyCode == KeyEvent.KEYCODE_STEM_1) { // Do stuff return true; } else if (keyCode == KeyEvent.KEYCODE_STEM_2) { // Do stuff return true; } else if (keyCode == KeyEvent.KEYCODE_STEM_3) { // Do stuff return true; } } return super.onKeyDown(keyCode, event); }
Xác định vị trí của nút
Thư viện AndroidX cung cấp 2 phương thức giúp mô tả vị trí của một nút:
WearableButtons.getButtonLabel()
trả về một chuỗi đã được bản địa hoá mô tả vị trí chung của nút trên thiết bị.WearableButtons.getButtonIcon()
trả về một biểu tượng đại diện cho vị trí chung của nút trên thiết bị.
Lưu ý: Bạn nên tránh sử dụng phần mô tả dạng văn bản khi mô tả các nút và chức năng của nút đó. Thay vào đó, hãy sử dụng các chỉ báo bằng hình ảnh. Tuy nhiên, trong một số trường hợp, việc mô tả nút lại có ý nghĩa hơn.
Các phương thức nêu trên được thiết kế cho nội dung mô tả đơn giản. Nếu các API này không phù hợp với nhu cầu của ứng dụng, bạn cũng có thể sử dụng API WearableButtons.getButtonInfo()
để lấy thông tin vị trí của nút trên màn hình và xử lý theo cách riêng. Để biết thêm thông tin về các API, vui lòng xem Tài liệu tham khảo về API Wear.