Pluma stylus

Android 6.0 y versiones posteriores admiten un formato de datos estándar para las conexiones de lápices Bluetooth a través de Bluetooth (BT), Bluetooth de bajo consumo (BTLE) o USB. La plataforma correlaciona la sincronización entre la entrada táctil y los datos del lápiz óptico, y luego proporciona los datos del lápiz óptico para renderizar MotionEvents en la app activa. En las siguientes secciones, se proporcionan lineamientos para los implementadores de dispositivos OEM, los creadores de accesorios para lápices ópticos y los desarrolladores de apps para lápices ópticos.

Lineamientos para implementadores de dispositivos OEM

Para habilitar la compatibilidad con lápices Bluetooth, los implementadores de dispositivos OEM deben admitir Bluetooth (y deberían admitir BTLE para una mayor compatibilidad). La plataforma controla la recopilación de datos, la correlación de tiempos y la renderización en la app para los eventos de lápiz compatibles.

En la versión 14 y posteriores, StylusButtonInputEventTest emula el comportamiento de un lápiz stylus conectado y prueba que los eventos de botones se informen correctamente. Como solución alternativa para versiones anteriores, recomendamos crear un accesorio o emulador de lápiz óptico que pueda simular eventos de lápiz óptico.

Lineamientos para creadores de accesorios de lápices ópticos

Para implementar la compatibilidad en un dispositivo con lápiz, los implementadores del dispositivo deben usar el descriptor de dispositivo de interfaz humana (HID) del lápiz que se muestra a continuación para describir cómo se representan los datos del lápiz (sensibilidad a la presión, borrador, botones, ID del dispositivo, nivel de batería, estado de carga, etcétera). El dispositivo lápiz envía la información de HID al dispositivo móvil Android, lo que permite que la plataforma correlacione los datos de HID con los datos táctiles de la pantalla táctil para producir eventos de lápiz óptico con la clase MotionEvent. En Android 14 y versiones posteriores, las pulsaciones de botones en la pluma stylus también generan eventos internos con la clase KeyEvent. Los datos se pueden enviar a través de Bluetooth (BT), Bluetooth de bajo consumo (BTLE) o USB.

Ejemplo de descriptor HID

El siguiente descriptor HID de muestra informa sobre el contacto de la punta, la presión, los botones principal y secundario, el borrador y el número de serie. El descriptor HID que incluyas debe reflejar con precisión lo que informa el lápiz óptico a través de Bluetooth, que podría ser cualquier subconjunto de las capacidades disponibles.
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
}

Lineamientos para desarrolladores de apps para lápices ópticos

La plataforma de Android controla automáticamente la vinculación y la correlación de eventos, por lo que las apps existentes y nuevas admiten el lápiz Bluetooth de forma predeterminada. Para obtener más información sobre la compatibilidad con lápices ópticos en apps para Android, consulta la documentación para desarrolladores de Android.