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