اندروید ۶.۰ و بالاتر از یک فرمت داده استاندارد برای اتصالات قلم بلوتوث از طریق بلوتوث (BT)، بلوتوث کممصرف (BTLE) یا USB پشتیبانی میکند. این پلتفرم زمانبندی بین ورودی لمسی و دادههای قلم را مرتبط میکند، سپس دادههای قلم را برای رندر MotionEvents به برنامه فعال ارائه میدهد. بخشهای زیر دستورالعملهایی را برای پیادهسازیکنندگان دستگاههای OEM، سازندگان لوازم جانبی قلم و توسعهدهندگان برنامههای قلم ارائه میدهند.
دستورالعملهایی برای مجریان دستگاههای OEM
برای فعال کردن پشتیبانی از قلم بلوتوث، پیادهسازیکنندگان دستگاههای OEM باید از بلوتوث پشتیبانی کنند (و برای سازگاری گستردهتر باید از BTLE نیز پشتیبانی کنند). این پلتفرم، جمعآوری دادهها، همبستگی زمانی و رندر کردن رویدادهای قلم پشتیبانیشده را در برنامه مدیریت میکند.
در نسخه ۱۴ و بالاتر، StylusButtonInputEventTest رفتار یک قلم متصل را شبیهسازی میکند و بررسی میکند که رویدادهای دکمه به درستی گزارش میشوند. به عنوان یک راه حل برای نسخههای پایینتر، توصیه میکنیم یک لوازم جانبی قلم یا شبیهساز ایجاد کنید که بتواند رویدادهای قلم را شبیهسازی کند.
دستورالعملهایی برای سازندگان لوازم جانبی قلم استایلوس
برای پیادهسازی پشتیبانی روی یک دستگاه قلم نوری، پیادهسازیکنندگان دستگاه باید از توصیفگر دستگاه رابط انسانی قلم نوری (HID) که در زیر نشان داده شده است، برای توصیف نحوه نمایش دادههای قلم نوری (حساسیت به فشار، پاککن، دکمهها، شناسه دستگاه، سطح باتری، وضعیت شارژ و غیره) استفاده کنند. دستگاه قلم نوری اطلاعات HID را به دستگاه تلفن همراه اندروید ارسال میکند و پلتفرم را قادر میسازد تا دادههای HID را با دادههای لمسی از صفحه لمسی مرتبط کند تا رویدادهای قلم نوری را با استفاده از کلاس MotionEvent تولید کند. در اندروید ۱۴ و بالاتر، فشردن دکمه روی قلم نوری همچنین با استفاده از کلاس 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
}
دستورالعملهایی برای توسعهدهندگان اپلیکیشنهای استایلوس
پلتفرم اندروید به طور خودکار جفتسازی و همبستگی رویدادها را مدیریت میکند، بنابراین هم برنامههای موجود و هم برنامههای جدید به طور پیشفرض از قلم بلوتوث پشتیبانی میکنند. برای کسب اطلاعات بیشتر در مورد پشتیبانی از قلمها در برنامههای اندروید، به مستندات توسعهدهندگان اندروید مراجعه کنید.