Важно (9.07.22)

Если картинки в постах не отображаются, зайдите в блог через прокси. РКН заблокировал поддомены blogger.com на которые загружались картинки.

воскресенье, 12 января 2014 г.

Используем вибрацию на Android устройствах

Внимание! Старая версия заметки более не актуальна, т.к. была написана для Delphi XE5/XE6. Это новая версия заметки, тестировалась на Delphi 10.3.3. Если вы всё ещё используете версию Delphi ниже 10.3, то рекомендую обновиться на последнюю версию!

Обновление от 01.12.19. App tested on Delphi 10.3.3

Для использования функций вибрации, необходимо воспользоваться Android API.
Android API изменялось от версии к версии и некоторые изменения коснулись функций вибрации. Я не буду углубляться в версии и т.п. Просто предлагаю вашему вниманию свой класс (TVibratorHelper) и обёртку (Androidapi.JNI.os.Vibration) для использования функций вибрации.

Обёртка «Androidapi.JNI.os.Vibration» содержит два класса «JVibrationEffect» и «JVibrator», которые включают все изменения в Android API до 29 версии (включительно).

Класс «TVibratorHelper» работает с обёрткой и содержит самые популярные методы для использования вибрации. В нём обрабатываются все изменения, которые коснулись функций вибрации в Android API до 29 версии (включительно). Проще говоря, методы класса будут работать одинаково, как на версии Android 4.4.2, так и на Android 10. Также я добавил совместимость с версиями Delphi Berlin и Tokyo.

Теперь посмотрим, какие методы мы имеем в классе «TVibratorHelper»

Внимание! Для использования функций вибрации, необходимо дать приложению разрешение «Manifest.permission.VIBRATE» (Категория: Обычные).

Описание методов класса:
  • Cancel – Отключение вибрации
  • hasVibrator - Проверка, есть ли вибратор в устройстве
  • vibrate(const AMilliseconds: Int64) – Постоянная вибрация в течение указанного времени (в миллисекундах).
Вибрация по шаблону.
Для удобства я добавил три метода, все они делают одно и тоже, но могут принимать разные массивы, содержащие шаблон.
  • vibrate(const APattern: TJavaArray<Int64>; const ARepeat: Integer)
  • vibrate(const APattern: array of Int64; const ARepeat: Integer)
  • vibrate(const APattern: array of string; const ARepeat: Integer)

Первый параметр – это шаблон. Массив целых чисел, которые являются продолжительностью включения или выключения вибратора в миллисекундах.
Вид шаблона: [500, 1000, 700, 2000].
Первое значение (500) в шаблоне указывает количество миллисекунд до включения вибрации.
Следующее значение указывает количество миллисекунд, в течение которых вибратор должен быть включён.
Последующие значения чередуются в таком же порядке.
Если взять шаблон выше, то получится: [pause(500), vibrate(1000), pause(700), vibrate(2000)]

Второй параметр – указывает нужно ли повторять шаблон (вибрацию). Шаблон – это массив, значит первое значение имеет индекс 0, второе 1 и т.д. Если мы укажем индекс = 2, то повтор вибрации начнётся со значения = 700. Чтобы запустить вибрацию без повтора, достаточно указать в параметре -1.

Для использования класса, необходимо:
  1. Скачать обёртку и класс
  2. Подключить класс в приложении
  3. Выдать разрешение «Manifest.permission.VIBRATE» приложению
  4. Написать необходимый код для использования вибрации.

Посмотреть и скачать класс, обёртку и пример можно тут: https://github.com/AndrewEfimov/Android-API-Examples/tree/master/Vibrator