Начиная с 27 марта 2025 г. мы рекомендуем использовать android-latest-release
вместо aosp-main
для создания и участия в AOSP. Дополнительные сведения см. в разделе Изменения в AOSP .
Стилус
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Android 6.0 и выше поддерживает стандартный формат данных для подключений Bluetooth-стилуса через Bluetooth (BT), Bluetooth Low Energy (BTLE) или USB. Платформа сопоставляет синхронизацию между сенсорным вводом и данными стилуса, а затем предоставляет данные стилуса для отображения MotionEvents в активном приложении. В следующих разделах приведены рекомендации для разработчиков OEM-устройств, создателей аксессуаров для стилуса и разработчиков приложений для стилуса.
Рекомендации для разработчиков OEM-устройств
Чтобы включить поддержку Bluetooth-стилуса, разработчики OEM-устройств должны поддерживать Bluetooth (и должны поддерживать BTLE для более широкой совместимости). Платформа обрабатывает сбор данных, временную корреляцию и рендеринг в приложение для поддерживаемых событий стилуса.
В версии 14 и выше StylusButtonInputEventTest
эмулирует поведение подключенного стилуса и проверяет, что события кнопок сообщаются правильно. В качестве обходного пути для более ранних версий мы рекомендуем создать аксессуар для стилуса или эмулятор, который может имитировать события стилуса.
Руководство для создателей аксессуаров для стилуса
Для реализации поддержки на стилусе разработчики устройств должны использовать дескриптор устройства интерфейса пользователя (HID) стилуса, показанный ниже, чтобы описать, как представлены данные стилуса (чувствительность к нажатию, ластик, кнопки, идентификатор устройства, уровень заряда батареи, состояние зарядки и т. д.). Стилус отправляет информацию HID на мобильное устройство Android, позволяя платформе сопоставлять данные HID с данными касания с сенсорного экрана для создания событий стилуса с использованием класса MotionEvent
. В Android 14 и выше нажатия кнопок на стилусе также генерируют внутренние события с использованием класса KeyEvent
. Данные могут быть отправлены по Bluetooth (BT), Bluetooth Low Energy (BTLE) или USB.
Пример дескриптора HID
Следующий пример дескриптора HID сообщает о контакте с наконечником, давлении, основных и дополнительных кнопках, ластике и серийном номере. Включаемый вами дескриптор HID должен точно отражать то, что сообщается стилусом через Bluetooth, что может быть любым подмножеством доступных возможностей.
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 автоматически обрабатывает сопряжение и корреляцию событий, поэтому как существующие, так и новые приложения поддерживают Bluetooth-стилус по умолчанию. Чтобы узнать больше о поддержке стилусов в приложениях Android, см. документацию Android Developer .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 UTC."],[],[],null,["# Stylus\n\nAndroid 6.0 and higher supports a standard data format for Bluetooth stylus\nconnections over Bluetooth (BT), Bluetooth Low Energy (BTLE), or USB. The\nplatform correlates timing between touch input and stylus data then provides\nstylus data to render MotionEvents to the active app. The following\nsections provide guidelines for OEM device implementers, stylus accessory creators, and\nstylus app developers.\n\nGuidelines for OEM device implementers\n--------------------------------------\n\nTo enable Bluetooth stylus support, OEM device implementers must support Bluetooth\n(and should support BTLE for wider compatibility). The platform handles data\ncollection, timing correlation, and rendering to the app for supported\nstylus events.\n\nIn 14 and higher,\n`StylusButtonInputEventTest` emulates the behavior of a connected stylus and tests\nthat button events are reported correctly. As a\nworkaround for lower versions, we recommend creating a stylus accessory or emulator that can\nsimulate stylus events.\n\nGuidelines for stylus accessory creators\n----------------------------------------\n\nTo implement support on a stylus device, device implementers must use the Stylus\nHuman Interface Device (HID) Descriptor shown below to describe how stylus data\n(pressure sensitivity, eraser, buttons, device ID, battery level, charging status, etc.) is\nrepresented. The stylus device sends the HID information to the Android mobile device,\nenabling the platform to correlate HID data with touch data from the touchscreen\nto produce stylus events using the\n[`MotionEvent`](//developer.android.com/reference/android/view/MotionEvent)\nclass. In Android 14 and higher, button presses on the stylus also generate\ninternal events using the\n[`KeyEvent`](//developer.android.com/reference/android/view/KeyEvent) class.\nData can be sent over Bluetooth (BT), Bluetooth Low Energy (BTLE), or USB.\n\n### Example HID descriptor\n\nThe following sample HID descriptor reports tip contact, pressure, primary and secondary buttons, eraser, and serial number. The HID descriptor you include should accurately reflect what is being reported by the stylus through bluetooth, which could be any subset of the available capabilities. \n\n```\nUsagePage(Digitizer)\nUsage(Pen)\nCollection(Application)\n Usage(Stylus)\n Collection(Logical)\n Usage(Tip Pressure)\n Logical Minimum(0)\n Logical Maximum(1023)\n Report Count(1)\n Report Size(10)\n Input(Data, Variable, Absolute, No Null)\n\n Usage(Barrel Switch)\n Usage(Secondary Barrel Switch)\n Usage(Tip Switch)\n Usage(Invert)\n Logical Maximum(1)\n Report Count(4)\n Report Size(1)\n Input(Data, Variable, Absolute, No Null)\n\n Usage(Transducer Serial Number)\n Report Count(1)\n Report Size(128)\n Feature(Constant, Variable)\n EndCollection\nEndCollection\n\nunsigned char HID_DESC[] = {\n 0x05, 0x0D, // UsagePage(Digitizer)\n 0x09, 0x02, // Usage(Pen)\n 0xA1, 0x01, // Collection(Application)\n 0x09, 0x20, // Usage(Stylus)\n 0xA1, 0x02, // Collection(Logical)\n 0x09, 0x30, // Usage(Tip Pressure)\n 0x15, 0x00, // Logical Minimum(0)\n 0x26, 0xFF, 0x03, // Logical Maximum(1023)\n 0x95, 0x01, // Report Count(1)\n 0x75, 0x0A, // Report Size(10)\n 0x81, 0x02, // Input(Data, Variable, Absolute, No Null)\n\n 0x09, 0x44, // Usage(Barrel Switch)\n 0x09, 0x5A, // Usage(Secondary Barrel Switch)\n 0x09, 0x42, // Usage(Tip Switch)\n 0x09, 0x3C, // Usage(Invert)\n 0x25, 0x01, // Logical Maximum(1)\n 0x95, 0x04, // Report Count(4)\n 0x75, 0x01, // Report Size(1)\n 0x81, 0x02, // Input(Data, Variable, Absolute, No Null)\n\n 0x09, 0x5B, // Usage(Transducer Serial Number)\n 0x95, 0x01, // Report Count(1)\n 0x75, 0x80, // Report Size(128)\n 0xB1, 0x03, // Feature(Constant, Variable)\n 0xC0, // End Collection\n 0xC0, // End Collection\n}\n```\n\nGuidelines for stylus app developers\n------------------------------------\n\nThe Android platform automatically handles pairing and event correlation,\nso both existing and new apps support Bluetooth stylus by default. To learn more about\nsupporting styluses in Android apps, see the\n[Android Developer documentation](https://developer.android.com/develop/ui/views/touch-and-input/stylus)."]]