สไตลัส

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

หลักเกณฑ์สำหรับผู้ติดตั้งใช้งานอุปกรณ์ OEM

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

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

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

หากต้องการใช้การรองรับในอุปกรณ์สไตลัส ผู้ติดตั้งใช้งานอุปกรณ์ต้องใช้ตัวบ่งชี้อุปกรณ์อินเทอร์เฟซผู้ใช้ (HID) ของสไตลัสที่แสดงด้านล่างเพื่ออธิบายวิธีแสดงข้อมูลสไตลัส (ความไวต่อแรงกด ยางลบ ปุ่ม รหัสอุปกรณ์ ระดับแบตเตอรี่ สถานะการชาร์จ ฯลฯ) อุปกรณ์สไตลัสจะส่งข้อมูล 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