스타일러스

Android 6.0 이상에서는 블루투스(BT), 저전력 블루투스(BTLE) 또는 USB를 통한 블루투스 스타일러스 연결을 위해 표준 데이터 형식을 지원합니다. 이 플랫폼은 터치 입력과 스타일러스 데이터 사이의 타이밍을 상호 연관시켜서 스타일러스 데이터를 사용하여 MotionEvents를 활성 앱에 렌더링합니다. 다음 섹션에서는 OEM 기기 구현자, 스타일러스 액세서리 제작자 및 도움이 될 것입니다.

OEM 기기 구현자 가이드라인

블루투스 스타일러스 지원을 사용하려면 OEM 기기 구현자가 블루투스를 지원해야 하며 더 넓은 호환성을 위해 BTLE를 지원해야 합니다. 플랫폼에서 데이터를 처리함 앱 간 수집, 타이밍 상관관계 분석, 렌더링을 지원하는지 여부도 확인할 수 있습니다. 스타일러스 이벤트.

14 이상에서 StylusButtonInputEventTest는 연결된 스타일러스의 동작을 에뮬레이션하고 버튼 이벤트가 올바르게 보고되는지 테스트합니다. 더 낮은 버전의 문제를 해결하려면 스타일러스 이벤트를 시뮬레이션할 수 있는 스타일러스 액세서리나 에뮬레이터를 만드는 것이 좋습니다.

스타일러스 액세서리 제작자를 위한 가이드라인

스타일러스 기기에서 지원을 구현하려면 기기 구현자는 아래에 나와 있는 인간 인터페이스 장치(HID) 설명자를 사용하여 스타일러스 데이터(압력 감도, 지우개, 버튼, 기기 ID, 배터리 잔량, 충전 상태 등)가 나타나는 방식을 설명해야 합니다. 스타일러스 기기는 HID 정보를 Android 휴대기기로 전송하고, HID 데이터와 터치 스크린의 터치 데이터 간의 상관관계를 지정하여 MotionEvent 클래스를 통해 스타일러스 이벤트를 생성합니다. Android 14 이상에서는 스타일러스의 버튼 누름도 KeyEvent 클래스를 사용하여 내부 이벤트를 생성합니다. 블루투스(BT), 저전력 블루투스(BTLE) 또는 USB를 통해 데이터를 전송할 수 있습니다.

HID 설명자 예

다음 샘플 HID 설명자는 팁 접촉, 압력, 기본 및 보조 버튼, 지우개, 일련번호를 보고합니다. 포함된 HID 설명자는 블루투스를 통해 스타일러스로 보고되는 내용을 정확하게 반영해야 하며 이는 사용할 수 있는 기능의 하위 집합일 수 있습니다.
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
}

스타일러스 앱 개발자를 위한 가이드라인

Android 플랫폼은 페어링 및 이벤트 상관관계를 자동으로 처리합니다. 따라서 기존 앱과 신규 앱 모두 기본적으로 블루투스 스타일러스를 지원합니다. Android 앱의 스타일러스 지원에 관한 자세한 내용은 Android 개발자 문서를 참고하세요.