В этом разделе представлено введение в различные тактильные API, доступные в Android. В нем также рассказывается, когда и как проверять наличие поддержки любого устройства, необходимой для обеспечения того, чтобы ваши тактильные эффекты работали так, как вы хотите.
Существует несколько различных способов создания тактильных эффектов, и при выборе среди них важно учитывать принципы проектирования тактильных ощущений Android. В следующей таблице суммированы эти высокоуровневые атрибуты каждого подхода:
- Доступность особенно важна при планировании отката поведения, и ее необходимо сочетать с проверкой поддержки отдельных устройств.
- Чистые тактильные ощущения вызывают ощущение четкости и чистоты, которые меньше раздражают пользователей.
- Богатые тактильные ощущения обладают большей выразительностью и часто требуют более многофункционального оборудования.
поверхность API | Доступность | Четкая тактильная связь | Богатые тактильные ощущения |
---|---|---|---|
Тактильная обратная связьКонстанты | Андроид 1.5+ (по константе) | ||
Предопределенный эффект вибрации | Андроид 10+ | ||
Состав Эффекта Вибрации | Android 11+ (постоянно) | ||
Включение/выключение, однократная и волновая вибрация | Андроид 1 |
Кроме того, API-интерфейсы уведомлений , описанные на этой странице, позволяют настраивать тактильные эффекты, воспроизводимые для входящих уведомлений.
На этой странице также описаны дополнительные концепции, охватывающие поверхности API:
- Есть ли в устройстве вибратор?
- Управление амплитудой обеспечивает более плавные и насыщенные тактильные эффекты, но поддерживается не всеми устройствами.
-
VibrationAttributes()
помогает классифицировать вибрацию в зависимости от ее использования, гарантируя, что к ней будут применены соответствующие пользовательские настройки, и таким образом избегая сюрпризов для пользователя.
HapticFeedbackConstants
Класс HapticFeedbackConstants
предоставляет константы на основе действий, позволяющие приложениям добавлять тактильную обратную связь, единообразную для всех устройств, вместо того, чтобы каждое приложение имело разные эффекты для общих действий.
Совместимость и требования
Использование метода View.performHapticFeedback
с этими константами не требует каких-либо специальных разрешений для приложения. На него распространяется свойство View.hapticFeedbackEnabled
, значение которого равно false
, отключит все вызовы тактильной обратной связи в представлении, включая вызовы по умолчанию. Основной связанный параметр — свойство View.hapticFeedbackEnabled
, значение которого равно false
отключит все вызовы тактильной обратной связи. в представлении, в том числе по умолчанию. Этот метод также учитывает системные настройки пользователя для включения сенсорной обратной связи.
Единственным соображением совместимости является уровень SDK конкретной константы для действия.
При использовании HapticFeedbackConstants
нет необходимости обеспечивать резервное поведение.
Использование HapticsFeedbackConstants
Подробные сведения об использовании HapticFeedbackConstants
см. в разделе Добавление тактильной обратной связи к событиям .
Предопределенный VibrationEffect
Класс VibrationEffect
предоставляет несколько предопределенных констант, таких как CLICK
, TICK
и DOUBLE_CLICK
. Эти эффекты могут быть оптимизированы для устройства.
Совместимость и требования
Для воспроизведения любого VibrationEffect
требуется разрешение VIBRATE
в манифесте приложения.
Нет необходимости обеспечивать резервное поведение при использовании предопределенного VibrationEffect
, поскольку константы, которые не имеют реализации, оптимизированной для устройства, возвращаются к стандартному резервному состоянию платформы.
API-интерфейсы Vibrator.areEffectsSupported
и Vibrator.areAllEffectsSupported
предназначены для определения наличия реализации, оптимизированной для устройства . Предопределенные эффекты по-прежнему можно использовать без оптимизированной реализации и использовать стандартный резервный вариант платформы. Следовательно, эти API-интерфейсы areEffectsSupported
необходимы только в том случае, если приложение хочет учитывать, оптимизирован ли эффект для устройства или нет.
Методы проверки эффекта могут возвращать одно из трех значений:
-
VIBRATION_EFFECT_SUPPORT_YES
указывает, что в устройстве оптимизирована поддержка этого эффекта. -
VIBRATION_EFFECT_SUPPORT_NO
указывает, что устройство не имеет оптимизированной поддержки, но все равно использует резервную платформу. -
VIBRATION_EFFECT_SUPPORT_UNKNOWN
указывает, что система не знает, оптимизирована реализация или нет.
Поскольку значение UNKNOWN
указывает на то, что API проверки недоступен, оно обычно возвращается для всех эффектов или ни для одного из них. Эти устройства динамически отступают.
Использование предопределенного VibrationEffect
Подробные сведения об использовании предопределенного VibrationEffect
см. в разделе Использование предопределенного VibrationEffect
для создания тактильной обратной связи .
Композиция VibrationEffect
Композиция VibrationEffect
— это эффект вибрации, созданный с помощью API VibrationEffect.startComposition
. Этот API позволяет создавать выразительные богатые тактильные ощущения , создавая последовательность примитивов с настраиваемыми задержками и интенсивностью. Однако будьте особенно внимательны, чтобы убедиться, что устройство поддерживает объединяемые функции, чтобы избежать несогласованности общего взаимодействия.
Совместимость и требования
Для воспроизведения любого VibrationEffect
требуется разрешение VIBRATE
в манифесте приложения.
Не все устройства поддерживают все функции API композиции, поэтому важно обеспечить доступность примитивов .
Проверьте поддержку примитива вибрации
Поддержка каждого примитива может быть получена с помощью метода Vibrator.arePrimitivesSupported
. В качестве альтернативы набор примитивов можно проверить вместе с помощью метода Vibrator.areAllPrimitivesSupported
— это эквивалентно операции AND
для поддержки каждого примитива.
Использование композиций VibrationEffect
Подробные сведения об использовании композиций VibrationEffect
см. в разделе Создание композиций вибрации .
Двухпозиционные, однократные и волновые вибрации
Самая старая форма вибрации, поддерживаемая на Android, — это простые схемы включения и выключения вибратора с настраиваемой длительностью. Эти API обычно не очень хорошо согласуются с принципами проектирования Haptics , поскольку они могут создавать неожиданные тактильные ощущения ; избегайте их, кроме как в крайнем случае.
Наиболее распространенным вариантом использования вибрации при включении-выключении являются уведомления, где, несмотря ни на что, требуется некоторая вибрация. Вибрации формы волны также позволяют уникально повторять шаблон бесконечно, как вы можете себе представить в случае мелодии звонка.
Однократный шаблон означает однократную вибрацию в течение N миллисекунд.
Существует два типа шаблонов сигналов :
- Только тайминги. Этот тип сигнала представляет собой описание чередующихся периодов простоя и длительности использования. Тайминги начинаются с продолжительности простоя. Следовательно, шаблоны сигналов часто начинаются с нулевого значения, указывающего на немедленное начало вибрации.
- Тайминги и амплитуды. Этот тип сигнала имеет дополнительный массив амплитуд, соответствующий каждой временной фигуре, а не неявное включение-выключение первой формы. Однако важно убедиться, что устройство поддерживает управление амплитудой, чтобы обеспечить достижение желаемого масштабирования.
Совместимость и требования
Поскольку вибрация включения-выключения — самая старая форма вибрации, она поддерживается практически на всех устройствах с вибратором , как описано далее на этой странице.
Для воспроизведения любого VibrationEffect
или вызовов vibrate
старого стиля требуется разрешение VIBRATE
в манифесте приложения.
При использовании различных значений амплитуды в форме сигнала мы настоятельно рекомендуем, чтобы устройство поддерживало управление амплитудой .
Проверьте поддержку контроля амплитуды
Ненулевые значения амплитуды округляются до 100 % на устройствах без контроля амплитуды, поэтому важно проверить, присутствует ли поддержка с помощью Vibrator.hasAmplitudeControl
. Более подробную информацию см. в разделе «Регулирование амплитуды» .
Вам следует тщательно подумать, имеет ли ваш эффект достаточное качество без контроля амплитуды. Возможно, лучше вернуться к специально разработанной вибрации включения-выключения.
Использование вибраций включения-выключения
В новых уровнях SDK все режимы вибрации были объединены в один выразительный класс VibrationEffect
, где эти простые вибрации создаются с помощью VibrationEffect.createOneshot
или VibrationEffect.createWaveform
.
API уведомлений
При настройке уведомлений приложения вы можете использовать один из следующих API, чтобы связать шаблон с каждым каналом уведомлений:
- AndroidX
- Андроид
Все эти формы принимают базовый шаблон формы сигнала включения-выключения , как описано ранее, где первая запись — это задержка перед включением вибратора.
Общие понятия
Несколько концепций применимы к поверхностям API, описанным выше.
Есть ли в устройстве вибратор?
Вы можете получить ненулевой класс Vibrator
из context.getSystemService(Vibrator.class)
. Если на устройстве нет вибратора, вызовы API вибрации не имеют никакого эффекта, поэтому приложениям не нужно блокировать все свои тактильные ощущения по условию. Однако при необходимости приложение может вызвать hasVibrator()
чтобы определить, настоящий ли это вибратор ( true
) или заглушка ( false
).
Пользователь отключил сенсорную тактильную связь?
В некоторых пользовательских реализациях может потребоваться вручную проверить, полностью ли пользователь отключил настройку обратной связи касания Android, и в этом случае эффекты обратной связи касания должны быть подавлены. Этот параметр можно запросить с помощью ключа HAPTIC_FEEDBACK_ENABLED
, где нулевое значение означает отключение.
Атрибуты вибрации
Атрибуты вибрации (в настоящее время в форме AudioAttributes
) могут быть предоставлены, чтобы помочь информировать систему о цели вибрации. Это необходимо при запуске вибрации, когда ваше приложение находится в фоновом режиме, поскольку для фонового использования поддерживаются только тактильные ощущения внимания.
Создание AudioAttributes
описано в документации по этому классу, и его следует рассматривать как вибрацию , а не звук .
Для справки: в большинстве случаев тип контента — CONTENT_TYPE_SONIFICATION
, а использование может быть такими значениями, как USAGE_ASSISTANCE_SONIFICATION
для сенсорной обратной связи на переднем плане или USAGE_ALARM
для сигнала тревоги в фоновом режиме. Аудио флажки не влияют на вибрацию.
Контроль амплитуды
Если вибратор имеет регулировку амплитуды, то он может воспроизводить вибрации различной интенсивности. Это важная возможность для создания богатых тактильных ощущений , а также потенциально позволяющая пользователю контролировать интенсивность тактильных ощущений по умолчанию.
Поддержку управления амплитудой можно проверить, вызвав Vibrator.hasAmplitudeControl
. Если вибратор не поддерживает амплитуду, все значения амплитуды будут отображаться как «выключено» или «включено» в зависимости от того, являются ли они нулевыми или ненулевыми . Следовательно, приложениям, использующим богатые тактильные ощущения с различной амплитудой, следует рассмотреть возможность их отключения, если в устройстве отсутствует контроль амплитуды.