Стилус

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

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

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

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

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

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

HID-дескриптор

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 6.0 автоматически обрабатывает сопряжение и корреляцию событий, поэтому как существующие, так и новые приложения, работающие на Android 6.0, по умолчанию поддерживают стилус Bluetooth. Дополнительные сведения об API-интерфейсах стилуса Bluetooth см. на сайте developer.android.com .