Caneta

O Android 6.0 e superior oferece suporte a um formato de dados padrão para conexões de caneta Bluetooth por Bluetooth (BT), Bluetooth Low Energy (BTLE) ou USB. A plataforma correlaciona o tempo entre a entrada de toque e os dados da caneta e, em seguida, fornece dados da caneta para renderizar MotionEvents para o aplicativo ativo. As seções a seguir fornecem diretrizes para implementadores de dispositivos OEM, criadores de acessórios de caneta e desenvolvedores de aplicativos de caneta.

Diretrizes para implementadores de dispositivos OEM

Para habilitar o suporte à caneta Bluetooth, os implementadores de dispositivos OEM devem oferecer suporte a Bluetooth (e devem oferecer suporte a BTLE para compatibilidade mais ampla). A plataforma lida com a coleta de dados, correlação de tempo e renderização para o aplicativo para eventos de caneta suportados.

Na versão 14 e superior, StylusButtonInputEventTest emula o comportamento de uma caneta conectada e testa se os eventos de botão são relatados corretamente. Como solução alternativa para versões anteriores, recomendamos a criação de um acessório ou emulador de caneta que possa simular eventos de caneta.

Diretrizes para criadores de acessórios de caneta

Para implementar o suporte em um dispositivo de caneta, os implementadores de dispositivos devem usar o descritor Stylus Human Interface Device (HID) mostrado abaixo para descrever como os dados da caneta (sensibilidade à pressão, borracha, botões, ID do dispositivo, nível da bateria, status de carregamento, etc.) são representados . O dispositivo caneta 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 caneta usando a classe MotionEvent . No Android 14 e versões posteriores, pressionar o botão da caneta também gera eventos internos usando a classe KeyEvent . Os dados podem ser enviados por Bluetooth (BT), Bluetooth Low Energy (BTLE) ou USB.

Exemplo de descritor HID

O exemplo de descritor HID a seguir relata contato da ponta, pressão, botões primário e secundário, borracha e número de série. O descritor HID incluído deve refletir com precisão o que está sendo relatado pela caneta por meio do 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 aplicativos de caneta

A plataforma Android lida automaticamente com o emparelhamento e a correlação de eventos, portanto, tanto os aplicativos existentes quanto os novos oferecem suporte à caneta Bluetooth por padrão. Para saber mais sobre o suporte a canetas em aplicativos Android, consulte a documentação do desenvolvedor Android .