Bút cảm ứng

Android 6.0 trở lên hỗ trợ định dạng dữ liệu tiêu chuẩn cho bút cảm ứng Bluetooth kết nối qua Bluetooth (BT), Bluetooth năng lượng thấp (BTLE) hoặc USB. Nền tảng này liên kết thời gian giữa dữ liệu đầu vào cảm ứng và dữ liệu bút cảm ứng, sau đó cung cấp dữ liệu bút cảm ứng để hiển thị MotionEvents cho ứng dụng đang hoạt động. Các phần sau đây đưa ra nguyên tắc cho những người triển khai thiết bị OEM, nhà sáng tạo phụ kiện bút cảm ứng và nhà phát triển ứng dụng bút cảm ứng.

Nguyên tắc dành cho người triển khai thiết bị OEM

Để bật tính năng hỗ trợ bút cảm ứng Bluetooth, nhà triển khai thiết bị OEM phải hỗ trợ Bluetooth (và nên hỗ trợ BTLE để có khả năng tương thích rộng hơn). Nền tảng này xử lý việc thu thập dữ liệu, tương quan thời gian và kết xuất cho ứng dụng đối với các sự kiện bút cảm ứng được hỗ trợ.

Từ 14 tuổi trở lên, StylusButtonInputEventTest mô phỏng hành vi của một bút cảm ứng đã kết nối và các bài kiểm thử để các sự kiện nút được báo cáo chính xác. Để khắc phục vấn đề cho các phiên bản thấp hơn, bạn nên tạo một phụ kiện bút cảm ứng hoặc trình mô phỏng có thể mô phỏng các sự kiện bút cảm ứng.

Nguyên tắc dành cho nhà sản xuất phụ kiện bút cảm ứng

Để triển khai tính năng hỗ trợ trên thiết bị bút cảm ứng, người triển khai thiết bị phải sử dụng Trình mô tả thiết bị giao diện người dùng (HID) bút cảm ứng như minh hoạ bên dưới để mô tả cách dữ liệu bút cảm ứng (độ nhạy áp lực, cục tẩy, nút, mã thiết bị, mức pin, trạng thái sạc, v.v.) được trình bày. Thiết bị bút cảm ứng sẽ gửi thông tin HID đến thiết bị di động Android, cho phép nền tảng liên kết dữ liệu HID với dữ liệu chạm từ màn hình cảm ứng để tạo sự kiện bút cảm ứng bằng cách sử dụng lớp MotionEvent. Trong Android 14 trở lên, thao tác nhấn nút trên bút cảm ứng cũng tạo ra các sự kiện nội bộ bằng cách sử dụng lớp KeyEvent. Dữ liệu có thể được gửi qua Bluetooth (BT), Bluetooth năng lượng thấp (BTLE) hoặc USB.

Ví dụ về bộ mô tả HID

Bộ mô tả HID mẫu sau đây báo cáo các nút tiếp xúc đầu, áp suất, nút chính và nút phụ, cục bộ và số sê-ri. Tên mô tả HID mà bạn đưa vào phải phản ánh chính xác những gì đang được được bút cảm ứng báo cáo qua bluetooth. Đây có thể là bất kỳ tập hợp con chức năng nào hiện có.
UsagePage(Digitizer)
Usage(Pen)
Collection(Application)
    Usage(Stylus)
    Collection(Logical)
        Usage(Tip Pressure)
        Logical Minimum(0)
        Logical Maximum(1023)
        Report Count(1)
        Report Size(10)
        Input(Data, Variable, Absolute, No Null)

        Usage(Barrel Switch)
        Usage(Secondary Barrel Switch)
        Usage(Tip Switch)
        Usage(Invert)
        Logical Maximum(1)
        Report Count(4)
        Report Size(1)
        Input(Data, Variable, Absolute, No Null)

        Usage(Transducer Serial Number)
        Report Count(1)
        Report Size(128)
        Feature(Constant, Variable)
    EndCollection
EndCollection

unsigned char HID_DESC[] = {
    0x05, 0x0D, // UsagePage(Digitizer)
    0x09, 0x02, // Usage(Pen)
    0xA1, 0x01, // Collection(Application)
    0x09, 0x20, // Usage(Stylus)
    0xA1, 0x02, // Collection(Logical)
    0x09, 0x30, // Usage(Tip Pressure)
    0x15, 0x00, // Logical Minimum(0)
    0x26, 0xFF, 0x03, // Logical Maximum(1023)
    0x95, 0x01, // Report Count(1)
    0x75, 0x0A, // Report Size(10)
    0x81, 0x02, // Input(Data, Variable, Absolute, No Null)

    0x09, 0x44, // Usage(Barrel Switch)
    0x09, 0x5A, // Usage(Secondary Barrel Switch)
    0x09, 0x42, // Usage(Tip Switch)
    0x09, 0x3C, // Usage(Invert)
    0x25, 0x01, // Logical Maximum(1)
    0x95, 0x04, // Report Count(4)
    0x75, 0x01, // Report Size(1)
    0x81, 0x02, // Input(Data, Variable, Absolute, No Null)

    0x09, 0x5B, // Usage(Transducer Serial Number)
    0x95, 0x01, // Report Count(1)
    0x75, 0x80, // Report Size(128)
    0xB1, 0x03, // Feature(Constant, Variable)
    0xC0, // End Collection
    0xC0, // End Collection
}

Nguyên tắc dành cho nhà phát triển ứng dụng bút cảm ứng

Nền tảng Android tự động xử lý việc ghép nối và mối tương quan sự kiện, vì vậy, cả ứng dụng hiện có và ứng dụng mới đều hỗ trợ bút cảm ứng Bluetooth theo mặc định. Để tìm hiểu thêm về hỗ trợ bút cảm ứng trong ứng dụng Android, hãy xem Tài liệu dành cho nhà phát triển Android.