Стилус

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 Developer .