手寫筆

Android 6.0 及更高版本支持通過藍牙 (BT)、藍牙低功耗 (BTLE) 或 USB 進行藍牙觸控筆連接的標準數據格式。該平台將觸摸輸入和触控筆數據之間的時間關聯起來,然後提供觸控筆數據以將 MotionEvents 呈現給活動的應用程序。以下部分為 OEM 設備實施者、觸控筆配件創建者和触控筆應用程序開發人員提供了指南。

OEM 設備實施者指南

要啟用藍牙觸控筆支持,OEM 設備實現者必須支持藍牙(並且應該支持 BTLE 以獲得更廣泛的兼容性)。該平台為支持的觸控筆事件處理數據收集、時間關聯和渲染到應用程序。

目前,Android CTS包括確保現有觸摸事件 API 支持默認行為的測試。作為一種解決方法,我們建議創建可以模擬觸控筆事件的觸控筆附件或模擬器。

觸控筆配件創作者指南

要在觸控筆設備上實現支持,設備實施者必須使用如下所示的觸控筆人機接口設備 (HID) 描述符來描述觸控筆數據(壓力靈敏度、橡皮擦、側按鈕、設備 ID 等)的表示方式。觸控筆設備將 HID 信息發送到 Android 移動設備,使平台能夠將 HID 數據與來自觸摸屏的觸摸數據相關聯,以通過 MotionEvent 生成觸控筆事件。數據可以通過藍牙 (BT)、藍牙低功耗 (BTLE) 或 USB 發送。

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 6.0 平台會自動處理配對和事件關聯,因此在 Android 6.0 上運行的現有應用程序和新應用程序都默認支持藍牙觸控筆。有關藍牙觸控筆 API 的詳細信息,請參閱developer.android.com