Стилус

Android 6.0 и более поздних версий поддерживает стандартный формат данных для подключений стилуса Bluetooth через Bluetooth (BT), Bluetooth Low Energy (BTLE) или USB. Платформа сопоставляет время между сенсорным вводом и данными стилуса, а затем предоставляет данные стилуса для рендеринга MotionEvents в активное приложение. В следующих разделах представлены рекомендации для разработчиков OEM-устройств, создателей аксессуаров для стилусов и разработчиков приложений для стилусов.

Рекомендации для разработчиков OEM-устройств

Чтобы включить поддержку стилуса Bluetooth, разработчики OEM-устройств должны поддерживать Bluetooth (и должны поддерживать BTLE для более широкой совместимости). Платформа обеспечивает сбор данных, временную корреляцию и рендеринг в приложении поддерживаемых событий стилуса.

В версии 14 и выше StylusButtonInputEventTest эмулирует поведение подключенного стилуса и проверяет правильность сообщения о событиях кнопок. В качестве обходного пути для более ранних версий мы рекомендуем создать аксессуар или эмулятор стилуса, который может имитировать события стилуса.

Рекомендации для создателей аксессуаров для стилусов

Чтобы реализовать поддержку на стилусном устройстве, разработчики устройств должны использовать дескриптор стилуса с интерфейсом пользователя (HID), показанный ниже, чтобы описать, как представляются данные стилуса (чувствительность к нажатию, ластик, кнопки, идентификатор устройства, уровень заряда батареи, состояние зарядки и т. д.). . Устройство стилуса отправляет информацию HID на мобильное устройство Android, позволяя платформе сопоставлять данные HID с данными касания с сенсорного экрана для создания событий стилуса с использованием класса MotionEvent . В Android 14 и более поздних версиях нажатия кнопок на стилусе также генерируют внутренние события с использованием класса KeyEvent . Данные можно отправлять через Bluetooth (BT), Bluetooth Low Energy (BTLE) или USB.

Пример HID-дескриптора

В следующем примере дескриптора HID сообщается о контакте наконечника, давлении, основной и дополнительной кнопках, ластике и серийном номере. Включенный вами дескриптор HID должен точно отражать то, что сообщает стилус через Bluetooth, что может быть любым подмножеством доступных возможностей.
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
}

Рекомендации для разработчиков стилусных приложений

Платформа Android автоматически обрабатывает сопряжение и корреляцию событий, поэтому как существующие, так и новые приложения по умолчанию поддерживают стилус Bluetooth. Дополнительные сведения о поддержке стилусов в приложениях Android см. в документации для разработчиков Android .