Stylus

O Android 6.0 e versões mais recentes oferecem suporte a um formato de dados padrão para conexões de stylus Bluetooth por Bluetooth (BT), Bluetooth de baixa energia (BTLE) ou USB. A plataforma correlaciona o tempo entre a entrada por toque e os dados da stylus e, em seguida, fornece dados da stylus para renderizar MotionEvents no app ativo. As seções a seguir fornecem diretrizes para implementadores de dispositivos OEM, criadores de acessórios de stylus e desenvolvedores de apps de stylus.

Diretrizes para implementadores de dispositivos OEM

Para ativar o suporte à stylus Bluetooth, os implementadores de dispositivos OEM precisam oferecer suporte ao Bluetooth e ao BTLE para uma compatibilidade mais ampla. A plataforma processa a coleta de dados, a correlação de tempo e a renderização no app para eventos de stylus compatíveis.

Na versão 14 e mais recentes, StylusButtonInputEventTest emula o comportamento de uma stylus conectada e testa se os eventos de botão são informados corretamente. Como solução alternativa para versões mais antigas, recomendamos criar um acessório ou emulador de stylus que possa simular eventos de stylus.

Diretrizes para criadores de acessórios de stylus

Para implementar o suporte em um dispositivo de stylus, os implementadores de dispositivos precisam usar o descritor de dispositivo de interface humana (HID, na sigla em inglês) de stylus mostrado abaixo para descrever como os dados da stylus (sensibilidade à pressão, borracha, botões, ID do dispositivo, nível da bateria, status de carregamento etc.) são representados. O dispositivo da stylus envia as informações HID para o dispositivo móvel Android, permitindo que a plataforma correlacione dados HID com dados de toque da tela sensível ao toque para produzir eventos da stylus usando a classe MotionEvent. No Android 14 e versões mais recentes, as pressões de botão na stylus também geram eventos internos usando a classe KeyEvent. Os dados podem ser enviados por Bluetooth (BT), Bluetooth de baixa energia (BTLE) ou USB.

Exemplo de descritor HID

O descritor de HID de exemplo a seguir informa o contato da ponta, a pressão, os botões primário e secundário, a borracha e o número de série. O descritor HID incluído precisa refletir com precisão o que está sendo informado pela stylus usando o Bluetooth, que pode ser qualquer subconjunto dos recursos disponíveis.
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
}

Diretrizes para desenvolvedores de apps de stylus

A Plataforma Android processa automaticamente o pareamento e a correlação de eventos. Assim, apps novos e existentes têm suporte ao Bluetooth Stylus por padrão. Para saber mais sobre o suporte a stylus em apps Android, consulte a documentação para desenvolvedores Android.