Bút cảm ứng

Android 6.0 trở lên hỗ trợ định dạng dữ liệu tiêu chuẩn cho các kết nối bút cảm ứng Bluetooth qua Bluetooth (BT), Bluetooth năng lượng thấp (BTLE) hoặc USB. Nền tảng này tương quan thời gian giữa dữ liệu đầu vào bằng thao tác chạm và dữ liệu bút cảm ứng, sau đó cung cấp dữ liệu bút cảm ứng để kết xuất MotionEvent cho ứng dụng đang hoạt động. Các phần sau đây cung cấp hướng dẫn cho nhà 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 nhà 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ợ.

Trong phiên bản 14 trở lên, StylusButtonInputEventTest mô phỏng hành vi của bút cảm ứng được kết nối và kiểm thử để đảm bảo các sự kiện nút được báo cáo chính xác. Để khắc phục vấn đề này trên 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, nhà triển khai thiết bị phải sử dụng Stylus Human Interface Device (HID) Descriptor (Trình mô tả thiết bị giao diện người dùng bút cảm ứng) như minh hoạ bên dưới để mô tả cách biểu thị dữ liệu bút cảm ứng (độ nhạy áp lực, tẩy, nút, mã nhận dạng thiết bị, mức pin, trạng thái sạc, v.v.). 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 tương quan dữ liệu HID với dữ liệu cảm ứng từ màn hình cảm ứng để tạo ra các sự kiện bút cảm ứng bằng lớp MotionEvent. Trong Android 14 trở lên, các lần 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 Low Energy (BTLE) hoặc USB.

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

Ví dụ sau đây về bộ mô tả HID báo cáo điểm tiếp xúc của đầu bút, áp lực, nút chính và nút phụ, tẩy và số sê-ri. Bộ mô tả HID mà bạn đưa vào phải phản ánh chính xác những gì bút cảm ứng báo cáo qua Bluetooth, có thể là bất kỳ tập hợp con nào trong số các chức năng 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à 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ề cách hỗ trợ bút cảm ứng trong các ứng dụng Android, hãy xem tài liệu dành cho nhà phát triển Android.