Nút vật lý

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:

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:

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.