タッチペン

Android 6.0 以降では、Bluetooth(BT)、Bluetooth Low Energy(BTLE)、USB 経由での Bluetooth タッチペン接続の標準データ形式がサポートされています。プラットフォームでは、タップでの入力とタッチペン データとの連携のタイミングが処理され、MotionEvent のレンダリングを行うためのタッチペン データがアクティブなアプリケーションに提供されます。次のセクションでは、OEM デバイスの実装、タッチペン アクセサリの作成、タッチペン アプリケーションの開発を行う際のガイドラインを示します。

OEM デバイスの実装に関するガイドライン

OEM デバイスで Bluetooth タッチペンのサポートを有効にするには、実装の際に Bluetooth をサポートする必要があります(より広範な互換性を維持するには、BTLE のサポートが必要です)。プラットフォームでは、サポート対象のタッチペン イベントにおけるデータ収集、連携タイミングの処理、アプリケーションへのレンダリングが行われます。

現時点では、Android CTS には、既存のタッチイベント用 API のデフォルト動作を確認するためのテストは含まれていません。対策としては、タッチペン イベントのシミュレーション用アクセサリやエミュレータを作成することをおすすめします。

タッチペン アクセサリの作成に関するガイドライン

タッチペン デバイスのサポートを実装するには、以下のタッチペン ヒューマン インターフェース デバイス(HID)記述子を使用して、タッチペン データ(感圧センサー、イレイザー、サイドボタン、デバイス ID など)を記述する必要があります。タッチペン デバイスは HID 情報を Android モバイル デバイスに送信し、プラットフォームで HID データとタッチスクリーンのタッチデータを連携させ、MotionEvent を通じてタッチペン イベントが生成できるようにします。データは、Bluetooth(BT)、Bluetooth Low Energy(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 で実行される既存および新しいアプリケーションの両方が Bluetooth タッチペンをデフォルトでサポートします。Bluetooth タッチペン API の詳細については、developer.android.com をご覧ください。