Pluma stylus

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

Lineamientos para implementadores de dispositivos OEM

Para habilitar la compatibilidad con la pluma stylus Bluetooth, los implementadores de dispositivos OEM deben admitir Bluetooth (y deben admitir BTLE para lograr una mayor compatibilidad). La plataforma controla la recopilación de datos, la correlación de tiempo y la renderización en la app para los eventos de la pluma stylus compatibles.

En 14 y versiones posteriores, StylusButtonInputEventTest emula el comportamiento de una pluma stylus conectada y prueba que los eventos de los botones se informen correctamente. Como solución alternativa para versiones anteriores, te recomendamos que crees un accesorio o emulador de pluma stylus que pueda simular eventos de pluma stylus.

Lineamientos para creadores de accesorios de pluma stylus

Para implementar la compatibilidad en un dispositivo de pluma stylus, los implementadores de dispositivos deben usar el descriptor de dispositivo de interfaz humana (HID) de la pluma stylus que se muestra a continuación para describir cómo se representan los datos de la pluma stylus (sensibilidad a la presión, borrador, botones, ID del dispositivo, nivel de batería, estado de carga, etcétera). El dispositivo de la pluma stylus envía la información HID al dispositivo móvil Android, lo que permite que la plataforma correlacione los datos HID con los datos táctiles de la pantalla táctil para producir eventos de la pluma stylus con la clase MotionEvent. En Android 14 y versiones posteriores, presionar los botones de la pluma stylus también genera 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

En el siguiente ejemplo de descriptor HID, se informa el contacto de la punta, la presión, los botones principales y secundarios, la goma de borrar y el número de serie. El descriptor HID que incluyas debe reflejar con precisión lo que informa la pluma stylus a través de Bluetooth, que podría ser cualquier subconjunto de las funciones 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 plumas stylus

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 la pluma stylus Bluetooth de forma predeterminada. Para obtener más información sobre cómo admitir plumas stylus en apps para Android, consulta la documentación para desarrolladores de Android.