قلم

‫Android نسخه ۶.۰ و بالاتر از قالب داده استاندارد برای اتصال قلم بلوتوثی ازطریق بلوتوث (BT)، بلوتوث کم‌مصرف (BTLE)، یا USB پشتیبانی می‌کند. پلاتفرم زمان‌بندی بین ورودی لمسی و داده‌های قلم را همبستگی می‌دهد و سپس داده‌های قلم را برای پردازش MotionEvents به برنامه فعال ارائه می‌دهد. بخش‌های زیر دستورالعمل‌هایی برای پیاده‌سازی‌کنندگان دستگاه OEM، سازندگان لوازم جانبی قلم، و توسعه‌دهندگان برنامه قلم ارائه می‌دهد.

دستورالعمل‌های مربوط به پیاده‌سازان دستگاه‌های سازنده اصلی محصول

برای فعال کردن پشتیبانی از قلم بلوتوث، پیاده‌سازان دستگاه سازنده اصلی محصول باید از «بلوتوث» پشتیبانی کنند (و برای سازگاری بیشتر باید از «بلوتوث کم‌مصرف» نیز پشتیبانی کنند). پلاتفرم مسئولیت جمع‌آوری داده‌ها، همبستگی زمان‌بندی، و پردازش در برنامه برای رویدادهای قلم پشتیبانی‌شده را برعهده دارد.

در نسخه ۱۴ و بالاتر، 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 مراجعه کنید.