O Android 6.0 e versões mais recentes são compatíveis com um formato de dados padrão para conexões de stylus Bluetooth via Bluetooth (BT), Bluetooth de baixa energia (BTLE) ou USB. A plataforma correlaciona o tempo entre a entrada de toque e os dados da stylus e fornece esses dados para renderizar MotionEvents no app ativo. As seções a seguir oferecem 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 a stylus Bluetooth, os implementadores de dispositivos OEM precisam oferecer suporte a Bluetooth (e devem oferecer suporte a BTLE para maior compatibilidade). A plataforma processa a coleta de dados, a correlação de tempo e a renderização no app para eventos de stylus compatíveis.
No Android 14 e versões mais recentes,
o StylusButtonInputEventTest emula o comportamento de uma stylus conectada e testa
se os eventos de botão são informados corretamente. Como uma solução alternativa para versões mais antigas, recomendamos criar um acessório de stylus ou um emulador que possa simular eventos de stylus.
Diretrizes para criadores de acessórios de stylus
Para implementar o suporte em um dispositivo com stylus, os implementadores precisam usar o descritor de dispositivo de interface humana (HID, na sigla em inglês) da 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 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 de stylus usando a classe
MotionEvent. No Android 14 e em versões mais recentes, os toques 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 HID de exemplo a seguir informa contato da ponta, pressão, botões primário e secundário, borracha e número de série. O descritor HID incluído precisa refletir com precisão o que está sendo informado pela stylus via 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 atuais oferecem suporte à stylus Bluetooth por padrão. Para saber mais sobre como oferecer suporte a canetas stylus em apps Android, consulte a documentação para desenvolvedores Android.