สไตลัส

Android 6.0 และสูงกว่ารองรับรูปแบบข้อมูลมาตรฐานสำหรับการเชื่อมต่อบลูทูธสไตลัสผ่าน Bluetooth (BT), Bluetooth Low Energy (BTLE) หรือ USB แพลตฟอร์มนี้เชื่อมโยงเวลาระหว่างอินพุตแบบสัมผัสและข้อมูลสไตลัส จากนั้นให้ข้อมูลสไตลัสเพื่อเรนเดอร์ MotionEvents ให้กับแอปที่ใช้งานอยู่ ส่วนต่อไปนี้เป็นแนวทางสำหรับผู้ใช้อุปกรณ์ OEM ผู้สร้างอุปกรณ์เสริมสไตลัส และนักพัฒนาแอปสไตลัส

แนวทางปฏิบัติสำหรับผู้ใช้อุปกรณ์ OEM

หากต้องการเปิดใช้งานการรองรับสไตลัส Bluetooth ผู้ใช้อุปกรณ์ OEM จะต้องรองรับ Bluetooth (และควรรองรับ BTLE เพื่อความเข้ากันได้ที่กว้างขึ้น) แพลตฟอร์มจะจัดการกับการรวบรวมข้อมูล ความสัมพันธ์ของเวลา และการเรนเดอร์ไปยังแอปสำหรับกิจกรรมสไตลัสที่รองรับ

ในเวอร์ชัน 14 และสูงกว่านั้น StylusButtonInputEventTest จะจำลองพฤติกรรมของสไตลัสที่เชื่อมต่ออยู่ และทดสอบว่าเหตุการณ์ของปุ่มได้รับการรายงานอย่างถูกต้อง เพื่อเป็นวิธีแก้ปัญหาสำหรับเวอร์ชันต่ำกว่า เราขอแนะนำให้สร้างอุปกรณ์เสริมหรือโปรแกรมจำลองสไตลัสที่สามารถจำลองเหตุการณ์ของสไตลัสได้

คำแนะนำสำหรับผู้สร้างอุปกรณ์เสริมสไตลัส

หากต้องการใช้การสนับสนุนบนอุปกรณ์สไตลัส ผู้ใช้อุปกรณ์ต้องใช้ตัวอธิบายอุปกรณ์อินเทอร์เฟซของมนุษย์ (HID) ของสไตลัสที่แสดงด้านล่างเพื่ออธิบายวิธีการแสดงข้อมูลของสไตลัส (ความไวต่อแรงกด ยางลบ ปุ่ม รหัสอุปกรณ์ ระดับแบตเตอรี่ สถานะการชาร์จ ฯลฯ) . อุปกรณ์สไตลัสส่งข้อมูล HID ไปยังอุปกรณ์เคลื่อนที่ Android ทำให้แพลตฟอร์มสามารถเชื่อมโยงข้อมูล HID กับข้อมูลการสัมผัสจากหน้าจอสัมผัสเพื่อสร้างกิจกรรมสไตลัสโดยใช้คลาส MotionEvent ใน Android 14 ขึ้นไป การกดปุ่มบนสไตลัสจะสร้างเหตุการณ์ภายในโดยใช้คลาส KeyEvent เช่นกัน สามารถส่งข้อมูลผ่าน Bluetooth (BT), Bluetooth Low Energy (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 จะจัดการการจับคู่และความสัมพันธ์ของเหตุการณ์โดยอัตโนมัติ ดังนั้นทั้งแอปที่มีอยู่และแอปใหม่จึงรองรับสไตลัส Bluetooth ตามค่าเริ่มต้น หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการรองรับสไตลัสในแอป Android โปรดดู เอกสารสำหรับนักพัฒนา Android