Android 6.0 и более поздние версии поддерживают стандартный формат данных для подключения Bluetooth-стилуса по Bluetooth (BT), Bluetooth Low Energy (BTLE) или USB. Платформа сопоставляет синхронизацию между сенсорным вводом и данными стилуса, а затем предоставляет данные стилуса для отображения событий MotionEvents в активном приложении. В следующих разделах приведены рекомендации для разработчиков OEM-устройств, производителей аксессуаров для стилуса и разработчиков приложений для стилуса.
Рекомендации для разработчиков OEM-устройств
Чтобы обеспечить поддержку Bluetooth-стилуса, производители OEM-устройств должны поддерживать Bluetooth (и BTLE для более широкой совместимости). Платформа обеспечивает сбор данных, временную корреляцию и рендеринг в приложении для поддерживаемых событий стилуса.
В версии 14 и выше StylusButtonInputEventTest эмулирует поведение подключенного стилуса и проверяет корректность регистрации событий кнопок. В качестве обходного решения для более ранних версий мы рекомендуем создать аксессуар для стилуса или эмулятор, который может имитировать события стилуса.
Рекомендации для создателей аксессуаров для стилуса
Для реализации поддержки стилуса разработчикам устройств необходимо использовать дескриптор HID (Stylus Human Interface Device), представленный ниже, для описания представления данных стилуса (чувствительности к нажатию, ластика, кнопок, идентификатора устройства, уровня заряда батареи, состояния зарядки и т. д.). Стилус отправляет информацию 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 .