Стилус

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

Руководство для производителей оригинального оборудования

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

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

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

Чтобы реализовать поддержку стилуса, производители устройств должны использовать дескриптор HID (Human Interface Device – устройство с человеческим интерфейсом), приведенный ниже. Он описывает, как представляются данные стилуса (чувствительность к нажатию, ластик, кнопки, идентификатор устройства, уровень заряда батареи, статус зарядки и т. д.). Стилус отправляет информацию HID на мобильное устройство Android, что позволяет платформе сопоставлять данные HID с данными о касаниях сенсорного экрана и создавать события стилуса с помощью класса MotionEvent. В Android 14 и более поздних версиях нажатия кнопок на стилусе также генерируют внутренние события с использованием класса KeyEvent. Данные можно передавать через Bluetooth, Bluetooth с низким энергопотреблением (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.