Производители устройств обычно считаются владельцами частных активов, созданных для каждого устройства. Таким образом, их инженерные усилия часто сосредоточены на каждом устройстве ; практически не требуется никаких усилий для обеспечения согласованности других устройств в экосистеме.
Напротив, разработчики стремятся создавать приложения, которые работают на всех телефонах Android в экосистеме, независимо от технических характеристик каждого устройства. Эта разница в подходах может вызвать проблему фрагментации, например, аппаратные возможности некоторых телефонов не соответствуют ожиданиям, установленным разработчиками приложений. Таким образом, если тактильные API работают на некоторых телефонах Android, но не на других, в результате получается противоречивая экосистема. Вот почему конфигурация оборудования играет решающую роль в обеспечении того, чтобы производители могли внедрять тактильные API Android на каждом устройстве.
На этой странице представлен пошаговый контрольный список для настройки соответствия оборудования для наилучшего использования тактильных API Android.
На следующем рисунке показано создание общих знаний между производителями устройств и разработчиками, что является важным шагом в создании сплоченной экосистемы:
Рисунок 1. Наращивание знаний между производителями устройств и разработчиками
Контрольный список внедрения тактильной связи
- Список констант для реализации тактильных ощущений.
- Руководство по реализации примитивов композиции HAL.
Константы сопоставления между HAL и API
- Рекомендации по сопоставлению между общедоступными константами API (названными заполнителями в платформе) и константами HAL, которые реализуют заполнители.
- Чтобы узнать больше об этом процессе, ознакомьтесь с принципами проектирования, в которых приведены рекомендации по рекомендуемому сопоставлению .
- Инструкция по целевому тактильному воздействию. Используйте эти инструкции для быстрой проверки вашего оборудования.
Ниже мы рассмотрим каждый из этих шагов более подробно.
Шаг 1. Реализация констант
Выполните следующие проверки, чтобы определить, соответствует ли ваше устройство минимальным требованиям для реализации тактильных функций:
Рисунок 2. Эффекты реализации
Рисунок 3. Реализация примитивов
Проверьте статус реализации следующих тактильных констант.
Тактильные константы | Локации и резюме |
---|---|
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK | Класс VibrationEffect Тактильные константы в VibrationEffect не включают в себя какие-либо события ввода и не имеют элементов пользовательского интерфейса. Вместо этого константы включают в себя понятие уровней энергии, например EFFECT_CLICK и EFFECT_HEAVY_CLICK , которые вызываются createPredefined() . |
Альтернативные вибрации, описанные ниже, выполняются на устройствах, которые не реализуют константы VibrationEffect
. Рекомендуется обновить эти конфигурации для обеспечения наилучшей работы на таких устройствах.
EFFECT_CLICK
Вибрация формы волны, созданная с помощью
VibrationEffect.createWaveform
, и время, настроенное вframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Вибрация формы волны, созданная с помощью
VibrationEffect.createWaveform
, и время, настроенное вframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.-
EFFECT_DOUBLE_CLICK
Вибрация формы волны, созданная с помощью
VibrationEffect.createWaveform
и таймингов (0, 30, 100, 30).-
EFFECT_TICK
Вибрация формы волны, созданная с помощью
VibrationEffect.createWaveform
, и время, настроенное вframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Рисунок 4. Реализация констант обратной связи
Проверьте состояние следующих констант общедоступных отзывов.
Тактильные константы | Локации и резюме |
---|---|
CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT , GESTURE_START , GESTURE_END | Класс HapticFeedbackConstants Тактильные константы в HapticFeedbackConstants помогают событиям ввода с определенными элементами пользовательского интерфейса, такими как KEYBOARD_PRESS и KEYBOARD_RELEASE , которые вызываются методом performHapticFeedback() . |
Шаг 2. Реализация примитивов
Тактильные примитивы в VibrationEffect.Composition
имеют масштабируемую интенсивность, которую разработчики могут использовать с помощью addPrimitive(int primitiveId, float scale, int delay)
. Примитивы можно разделить на две категории:
Короткие примитивы: Примитивы с небольшой продолжительностью, обычно менее 20 мс. Это
CLICK
,TICK
иLOW_TICK
.Примитивы Chirp: Примитивы с различной амплитудой и частотой, обычно с большей продолжительностью, чем короткие примитивы. Это
SLOW_RISE
,QUICK_RISE
,QUCK_FALL
,THUD
иSPIN
.
Короткие примитивы
Короткие примитивы могут быть описаны профилем ускорения на выходе двигателя вибратора. Используемая абсолютная частота варьируется для каждого примитива в зависимости от резонансной частоты привода. См. раздел Настройка испытательного оборудования для получения дополнительной информации о настройке оборудования и инструментах для измерения выходных данных.
Ценным показателем качества коротких вибраций является соотношение импульса к звонку (PRR), показанное на рисунке 5. PRR определяется как соотношение между основным импульсом , определяемым сигналом внутри окна длительности, где амплитуда уменьшается до 10% от пикового значения. амплитуда и кольцевой импульс , определяемый сигналом, амплитуда которого уменьшается с 10% пиковой амплитуды до менее 1% пиковой амплитуды. Дополнительные сведения о PRR см. в разделе Анализ формы волны , а дополнительные сведения об анализе и сравнении результатов см. в разделе Сравнение результатов с помощью карты производительности .
Рисунок 5. Определение соотношения импульса и звонка
Применяйте короткие примитивы в качестве обратной связи с пользователем или используйте их в более длинных композициях для создания мягких текстур. Это означает, что они обычно срабатывают часто и воспроизводятся в быстрой последовательности. Воспринимаемая интенсивность одного короткого примитива может усугубить большую интенсивность эффекта. По этой причине калибруйте одиночный или низкий тактовый примитив с более крупной композицией, например, 100 последовательных тиков.
Нажмите примитив
Примитив щелчка — это сильный, четкий эффект, обычно работающий близко к резонансной частоте устройства для достижения максимальной мощности за короткое время. Он сильнее и глубже, чем другие примитивы, и работает с максимальной интенсивностью.
Если возможно, используйте перегрузку двигателя в начале и активное торможение в конце, чтобы добиться короткого времени нарастания и спада двигателя. Для некоторых двигателей использование прямоугольной волны вместо синусоидальной может обеспечить более быстрое ускорение. На рис. 6 показан пример профиля выходного ускорения для примитива щелчка:
Рисунок 6. Пример профиля выходного ускорения для примитива щелчка
Параметр | Руководство |
---|---|
Продолжительность | Цель: 12 мс Предел: < 30 мс |
Пиковое выходное ускорение | Цель: 2 Г Предел: > 1 Г |
Частота | Примерно на резонансной частоте |
Тик примитивный (светлый тик)
Примитив «тик» — это резкий, короткий эффект, обычно действующий в более высоком частотном диапазоне. Этот примитив также можно описать как щелчок средней интенсивности на более высокой частоте с коротким хвостом. Те же рекомендации применимы для достижения короткого времени нарастания с использованием перегрузки двигателя или прямоугольной волны для начального начала и активного торможения при смещении. На рис. 7 показан пример выходного профиля ускорения для примитива галочки:
Рисунок 7. Пример выходного профиля ускорения для примитива тика
Параметр | Руководство |
---|---|
Продолжительность | Цель: 5 мс Предел: < 20 мс |
Пиковое выходное ускорение | Цель: половина Предел: от 0,5 G до 1 G. |
Частота | Цель: удвоение резонансной частоты Предел: < 500 Гц |
Примитив с низким тиком
Примитив низкого тика — это более мягкая и слабая версия легкого тика, работающая в более низкочастотном диапазоне, чтобы придать эффекту больше телесности. Этот примитив также можно описать как щелчок средней интенсивности на более низкой частоте, предназначенный для многократного использования для динамической обратной связи. Те же рекомендации применимы для достижения короткого времени нарастания с использованием перегрузки двигателя или прямоугольной волны для начального начала. На рис. 8 показан пример профиля выходного ускорения для примитива с низким тиковым числом:
Рисунок 8. Пример профиля выходного ускорения для примитива с низким тиком
Параметр | Руководство |
---|---|
Продолжительность | Цель: 12 мс Предел: < 30 мс |
Пиковое выходное ускорение | Цель: 1/4 Предел: от 0,2 G до 0,5 G. |
Частота | Цель: 2/3 резонансной частоты Предел: < 100 Гц |
Чирикающие примитивы
Примитивы чирпа могут быть описаны входными сигналами уровня напряжения и частоты вибрации. Ускорение, которое двигатель способен развивать в разных диапазонах частот, варьируется в зависимости от частотной характеристики привода. Диапазоны частот и уровни напряжения необходимо регулировать индивидуально для каждого устройства.
Медленный подъем примитива
Медленный подъем представляет собой медленный подъем амплитуды и частоты вверх с мягким началом и постоянным увеличением интенсивности вибрации по всему ходу. Это может быть реализовано путем последовательного изменения амплитуды и частоты с использованием более низкого частотного диапазона, работающего за счет резонанса. На рисунке 9 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.)
Рисунок 9. Входные параметры и пример выходного профиля ускорения для примитива медленного нарастания.
Если частотная характеристика двигателя ограничена (недостаточно сильно отличается от его резонансной частоты), то альтернативной реализацией является синусоидальная развертка от 1/2x до 1x резонансной частоты. Резонанс двигателя способствует достижению пика сигнала в конце.
Параметр | Руководство |
---|---|
Продолжительность | Цель: 500 мс Допуск: 20 мс |
Пиковое выходное ускорение | Цель: 0,5 Г Предел: от 0,5 G до 1 G. |
Частота | Цель: от 1/2 до 2/3 резонансной частоты. Альтернатива: 1/2 от резонансной частоты. |
Быстроподъемный примитив
Быстрый подъем — это более быстрый подъем амплитуды и частоты вверх с мягким началом и постоянным увеличением интенсивности вибрации по всему диапазону колебаний. Целевые значения выходного ускорения и частоты вибрации должны быть такими же, как и у примитива медленного нарастания, достигаемого за более короткую продолжительность. На рисунке 10 показаны входные параметры вибрации и пример выходного профиля ускорения для примитива медленного подъема. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.)
Рисунок 10. Входные параметры и пример выходного профиля ускорения для примитива быстрого подъема
Параметр | Руководство |
---|---|
Продолжительность | Цель: 150 мс Допуск: 20 мс |
Пиковое выходное ускорение | Цель: то же, что и Ограничение: то же, что и |
Частота | Цель: то же, что и Альтернатива: то же, что и |
Быстрое падение примитива
Быстрое падение представляет собой быстрое снижение амплитуды и частоты с мягким началом. Вы можете использовать более высокую частоту в качестве начальной точки, пока двигатель набирает обороты для достижения пикового выходного ускорения. Частота должна последовательно уменьшаться по всей развертке, даже во время нарастания. На рис. 11 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.)
Рисунок 11. Входные параметры и пример выходного профиля ускорения для примитива быстрого падения.
Параметр | Руководство |
---|---|
Продолжительность | Цель: 100 мс Допуск: 20 мс |
Пиковое выходное ускорение | Цель: 1 Г Предел: от 0,5 G до 2 G. |
Частота | Цель: увеличение резонансной частоты в 2–1 раз. |
Стук примитивный
Стук — это глухой, низкий, ударный эффект, имитирующий физическое ощущение удара по полому дереву. Этот примитив работает в низкочастотном диапазоне, подобно примитиву low Tick, чтобы придать эффекту большую насыщенность. Вы можете реализовать примитив глухого звука как развертку вниз по амплитуде и частоте в более низком частотном диапазоне (предпочтительно менее 100 Гц). На рис. 12 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.)
Рисунок 12. Входные параметры и пример выходного профиля ускорения для примитива удара.
Если частотная характеристика двигателя ограничена, альтернативной реализацией является запуск с сигнала возбуждения полной интенсивности на резонансной частоте и падение до минимально возможной частоты, которую все еще можно воспринимать. Этот подход может потребовать увеличения интенсивности сигнала возбуждения на более низкой частоте, чтобы вибрация ощущалась.
Параметр | Руководство |
---|---|
Продолжительность | Цель: 300 мс Допуск: 20 мс |
Пиковое выходное ускорение | Цель: 0,25 Г Предел: от 0,2 G до 0,5 G. |
Частота | Цель: от 1/2 до 1/3 резонансной частоты. Альтернатива: от 1x до 1/2 резонансной частоты. |
Спиновый примитив
Вращение имитирует вращательный момент быстрого вращения вверх и вниз с небольшим акцентом в центре. Вращение можно реализовать путем независимого изменения амплитуды и частоты в противоположных направлениях с последующим обратным движением. Важно использовать более низкий частотный диапазон (желательно менее 100 Гц). На рис. 13 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.)
Мы рекомендовали вызывать примитив вращения дважды подряд или три раза в композициях, чтобы добиться ощущения вращения и неустойчивости.
Если частотная характеристика двигателя ограничена, альтернативной реализацией является быстрое изменение синусоидальной частоты от 1/2 до 1 резонансной частоты и обратно. Резонанс двигателя автоматически придает сигналу акцент посередине.
Рисунок 13. Входные параметры и пример выходного профиля ускорения для примитива вращения.
Параметр | Руководство |
---|---|
Продолжительность | Цель: 150 мс Допуск: 20 мс |
Пиковое выходное ускорение | Цель: 0,5 Г Предел: от 0,25 до 0,75 G. |
Частота | Цель: от 2/3 до 1/3, затем обратно до 1/2 резонансной частоты. Альтернатива: от 2/3 до 1x, затем обратно до 1/2 резонансной частоты. |
Шаг 3. Сопоставьте константы между HAL и API.
Шаг 3 представляет рекомендуемые сопоставления между общедоступными константами HAL и константами API. Если оборудование, оцененное на шаге 1, не реализует константы HAL, используйте шаг 3 для обновления резервных шаблонов, описанных в шаге 1, чтобы генерировать аналогичные выходные данные. Сопоставлению помогают две разные модели по умолчанию:
Дискретная модель (простая)
- Амплитуда является ключевой переменной этой модели. Каждый объект в HAL представляет собой различную тактильную амплитуду.
- Эта модель представляет собой минимальное требование, необходимое для реализации базового тактильного UX.
- Более продвинутый тактильный UX требует усовершенствованного оборудования и продвинутой модели (непрерывной модели).
Непрерывная модель (расширенная)
- Текстура и амплитуда являются ключевыми переменными этой модели. Каждый объект в HAL представляет разные тактильные текстуры. Амплитуда каждого объекта HAL контролируется масштабным коэффициентом (
S
). - Для этой модели требуется современное оборудование. Если OEM-производители хотят использовать расширенный тактильный пользовательский интерфейс с
VibrationEffect.Composition
(для наилучшего использования новейших тактильных API), рекомендуется реализовать свое оборудование с использованием этой модели.
- Текстура и амплитуда являются ключевыми переменными этой модели. Каждый объект в HAL представляет разные тактильные текстуры. Амплитуда каждого объекта HAL контролируется масштабным коэффициентом (
Дискретная модель
Рекомендуется сопоставить все общедоступные константы, представленные в API, с соответствующими константами HAL. Чтобы начать этот процесс, выясните, сколько тактильных сигналов с дискретной амплитудой устройство может определить в HAL. Конкретный вопрос, построенный на основе этого понятия, выглядит следующим образом: сколько одноимпульсных тактильных эффектов с ощутимой человеком разницей в амплитуде можно определить в моем телефоне? Ответ на этот вопрос определяет отображение.
Определение констант HAL — процесс, зависящий от оборудования. Например, телефон начального уровня может иметь только аппаратные возможности для создания одного тактильного сигнала. Устройства с более совершенными аппаратными компонентами создают более широкий диапазон дискретных уровней амплитуды и могут определять несколько тактильных сигналов в HAL. Сопоставление констант HAL-API берет константу HAL (используя среднюю амплитуду в качестве базовой линии), а затем на ее основе упорядочивает более сильные или более слабые эффекты.
Рисунок 14. Диапазон констант HAL по амплитуде
Когда количество констант HAL с дискретной амплитудой определено, пришло время сопоставить константы HAL и API с количеством констант HAL. Этот процесс отображения может сегментировать одну импульсную константу API на три дискретные группы уровней амплитуды. Способ сегментации констант API основан на принципах UX для сопровождения входных событий. Дополнительную информацию см. в разделе «Дизайн Haptics UX» .
Рисунок 15. Сопоставление констант HAL-API: дискретная модель
Если ваше устройство поддерживает только две константы HAL с дискретными амплитудами, рассмотрите возможность объединения констант HAL уровня средней и высокой амплитуды. Примером этого понятия на практике может быть сопоставление EFFECT_CLICK
и EFFECT_HEAVY_CLICK
с одной и той же константой HAL, которая будет константой HAL уровня средней амплитуды. Если ваше устройство поддерживает только одну константу HAL с дискретной амплитудой, рассмотрите возможность объединения всех трех уровней в один.
Непрерывная модель
Непрерывная модель с масштабируемостью амплитуды может применяться для определения констант HAL. Коэффициент масштабирования ( S
) можно применить к константам HAL (например, HAL_H0
, HAL_H1
) для создания масштабированного HAL ( HAL_H0
x S
). В этом случае масштабированный HAL отображается для определения констант API ( HAL_H0
x S1
= H0S1
= EFFECT_TICK
), как показано на рисунке 16. Используя масштабируемость амплитуды непрерывной модели, устройство может хранить небольшое количество констант HAL с характерными текстурами. и добавьте вариации амплитуды, отрегулировав масштабный коэффициент ( S
). Производители устройств могут определить количество констант HAL в зависимости от того, сколько различных тактильных текстур они хотят предоставить.
Рисунок 16. Диапазон констант HAL по текстуре (HAL_H0) и шкале амплитуды (S)
Рисунок 17. Сопоставление констант HAL-API: непрерывная модель.
В непрерывной модели разные константы HAL представляют собой разные тактильные текстуры , а не разные амплитуды; масштабный коэффициент ( S
) позволяет настроить амплитуду. Однако, поскольку восприятие текстуры (например, резкость) связано с восприятием продолжительности и амплитуды, рекомендуется объединить текстуру и масштабный коэффициент (в процессе проектирования отображения HAL-API).
На рисунке 18 показано сопоставление констант путем увеличения вариации от одной HAL до множества констант API с масштабируемостью амплитуды.
Рисунок 18. Увеличение вариации с масштабированием амплитуды
Для всех масштабируемых констант API, таких как PRIMITIVE_TICK
и PRIMITIVE_CLICK
в VibrationEffect.Composition
, уровень энергии константы API зависит от параметра float scale
, когда константа API объявляется через addPrimitive(int primitiveID, float scale, int delay)
. PRIMITIVE_TICK
и PRIMITIVE_CLICK
могут быть разработаны с четким различием, используя разные константы HAL. Этот подход рекомендуется, если вы хотите добавить вариации к текстуре .
Шаг 4. Оцените оборудование
Оценка оборудования включает определение трех тактильных эффектов, обозначенных как Эффекты 1, 2 и 3 для этой конкретной оценки.
Эффект 1: Предопределенные короткие тактильные константы
Константа VibrationEffect.EFFECT_CLICK
— это базовый эффект или общий знаменатель в сопоставлении HAL-API, представленном на шаге 2. Она сопоставлена с наиболее часто используемым эффектом HapticFeedbackConstants.KEYBOARD_PRESS
. Оценка этого эффекта помогает определить готовность вашего целевого устройства к четким тактильным ощущениям .
Эффект 2: короткий пользовательский тактильный эффект.
Константа VibrationEffect.createOneShot(20,255)
предназначена для пользовательских тактильных эффектов. Для коротких одиночных импульсов рекомендуемый максимальный порог для определения продолжительности — 20 мс. Не рекомендуется использовать одиночный импульс длительностью более 20 мс, поскольку он воспринимается как жужжащая вибрация .
Рисунок 19. Короткий пользовательский тактильный эффект
Эффект 3: длительный тактильный эффект с изменением амплитуды.
Константа VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)
предназначена для длинных пользовательских эффектов с изменением амплитуды. Способность создавать различные амплитуды для пользовательских тактильных эффектов является одним из показателей оценки возможностей устройства в области насыщенных тактильных ощущений . Рекомендуемые timings []
и amplitudes []
— {500, 500}
и {128, 255}
соответственно, что представляет собой тенденцию увеличения амплитуды от 50% до 100% с частотой дискретизации 500 мс.
Рисунок 20. Длинный индивидуальный тактильный эффект с изменением амплитуды.
Чтобы проверить аппаратные возможности управления амплитудой для Эффекта 3, используйте метод Vibrator.hasAmplitudeControl()
. Результат должен быть true
, чтобы выполнить VibrationEffect.createWaveform
с заданной амплитудой.
Рисунок 21. Субъектная оценка тактильного эффекта 1, 2 и 3.
Проведите субъективную оценку
Для быстрой проверки согласованности сначала проведите субъективную оценку. Цель субъективной оценки — наблюдать за амплитудой тактильных эффектов, чтобы определить, может ли устройство генерировать тактильные ощущения с амплитудами, воспринимаемыми человеком.
Конкретный вопрос, построенный вокруг этого понятия, выглядит следующим образом: может ли устройство производить ожидаемые тактильные эффекты для пользователей? Ответ на этот вопрос поможет вам избежать неудачных тактильных ощущений , в том числе незаметных тактильных ощущений, которые пользователи не могут почувствовать, или непреднамеренных тактильных ощущений, когда формы сигналов не создают заданные узоры.
Провести расширенную оценку
Настоятельно рекомендуется провести расширенную оценку качества. Расширенные оценки качества характеризуют количественные характеристики тактильных эффектов для реализации качественных тактильных ощущений . По завершении производители устройств смогут диагностировать текущее тактильное состояние, а это значит, что они смогут поставить цели по улучшению общего качества. См. Оценка оборудования .