Rysik

Android 6.0 i nowsze wersje obsługują standardowy format danych dla połączeń rysika Bluetooth przez Bluetooth (BT), Bluetooth Low Energy (BTLE) lub USB. Platforma koreluje czas między danymi dotykowymi a danymi z rysika, a następnie dostarcza dane stylu, aby renderować zdarzenia MotionEvents w aktywnej aplikacji. W sekcjach poniżej znajdziesz wskazówki dla twórców implementacji urządzeń OEM, twórców akcesoriów z rysikiem i deweloperów aplikacji związanych ze stylami.

Wytyczne dla firm wdrażających urządzenia OEM

Aby umożliwić obsługę rysika Bluetooth, implementatorzy urządzeń OEM muszą obsługiwać Bluetooth (i w celu zapewnienia większej zgodności powinni obsługiwać BTLE). Platforma obsługuje zbieranie danych oraz korelację czasową i renderowanie w aplikacji w przypadku obsługiwanych zdarzeń stylu.

W Androidzie 14 i nowszych StylusButtonInputEventTest emuluje działanie podłączonego rysika i sprawdza, czy zdarzenia przycisku są zgłaszane prawidłowo. Aby obejść ten problem w starszych wersjach, zalecamy utworzenie akcesorium lub emulatora rysika, który będzie symulować zdarzenia rysika.

Wskazówki dla twórców akcesoriów do piór

Aby wdrożyć obsługę urządzenia z rysikiem, implementatorzy muszą użyć opisanego poniżej opisu urządzenia z interfejsem dla użytkownika (HID), aby opisać sposób, w jaki dane rysika (czułość na nacisk, gumka, przyciski, identyfikator urządzenia, poziom naładowania baterii, stan ładowania itp.) są reprezentowane. Rysik wysyła informacje HID do urządzenia mobilnego z Androidem, co umożliwia platformie skorelowanie danych HID z danymi dotykowymi z ekranu dotykowego i generowanie zdarzeń rysika za pomocą klasy MotionEvent. W Androidzie 14 i nowszych naciśnięcie przycisku na rysikiem powoduje też wygenerowanie wewnętrznych zdarzeń za pomocą klasy KeyEvent. Dane można wysyłać przez Bluetooth (BT), Bluetooth Low Energy (BTLE) lub USB.

Przykładowy deskryptor HID

Ten przykładowy opis HID zawiera informacje o styku, naciśnięciu, przyciskach głównych i dodatkowych, gumce oraz numerze seryjnym. Podany przez Ciebie identyfikator HID powinien dokładnie odzwierciedlać to, co jest zgłaszane przez pióro za pomocą Bluetooth. Może to być dowolna podgrupa dostępnych funkcji.
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
}

Wskazówki dla deweloperów aplikacji obsługujących rysiki

Platforma Android automatycznie obsługuje parowanie i korelację zdarzeń, więc zarówno istniejące, jak i nowe aplikacje domyślnie obsługują pióro Bluetooth. Więcej informacji o obsłudze rysików w aplikacjach na Androida znajdziesz w dokumentacji dla programistów Androida.