觸控筆

Android 6.0 及更高版本支援透過藍牙 (BT)、低功耗藍牙 (BTLE) 或 USB 進行藍牙手寫筆連接的標準資料格式。該平台將觸控輸入和手寫筆資料之間的時序關聯起來,然後提供手寫筆資料以將 MotionEvent 渲染到活動應用程式。以下部分為 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 開發人員文件