Программирование для одиноких дам или Учимся использовать Vibrator в Android

Для работы с вибро в смартфонах программисты Android используют специальный класс Vibrator. Его возможностей вполне хватает, чтобы привлечь внимание пользователя к какому-нибудь уведомлению, создаваемому приложением, или просто назначить отклик вибрацией на какие-либо события интерфейса. Класс Vibrator Android является наследником Object и привносит всего четыре функции (точнее, три + одну перегрузку). Код, работающий с вибро, лаконичен и не загружает проект, будучи размещенным в реализациях функций.

Инициализация

Для начала нужно осуществить импорт соответствующего модуля:

package com.example.vibrato;

Рабочий экземпляр класса Vibrator берется при помощи вызова функции getSystemService с параметром Context.VIBRATOR_SERVICE. Вот так:

Vibrator _vibrato = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

getSystemService возвращает хэндл системного сервиса по его имени.

Работа с вибровызовами требует особого разрешения, поэтому нужно не забыть прописать соответствующий permission в AndroidManifest.xml:

<uses-permission android:nama=»android.permission.VIBRATE»/>

 

Метод vibrate

После получения экземпляра класса, мы можем оперировать с ним. Перво-наперво, вибратор должен вибрировать. Для этого в нем предусмотрен метод vibrate и его перегрузка (о ней ниже). Параметром метода служит количество миллисекунд, в течение которых устройство будет вибрировать. Стоит помнить, что в приложениях чаще оперируют привычными секундами, а не миллисекундами, поэтому нужно не забывать умножать параметр на 1000, если это необходимо. В качестве примера создадим новый проект Android и накидаем такой интерфейс:

Предполагается, что пользователь будет вводить в текстовое поле количество секунд, а по нажатию кнопки «Вибрировать» устройство будет… эммм… вибрировать ровно столько секунд. Поэтому нажатие первой кнопки привяжем к такому программному коду:

public void onVibroButtonClick(View view)

{

// создаем экземпляр класса Vibrator

Vibrator _vibrato = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// считываем количество секунд, введенное пользователем

TextView _text = (TextView)findViewById(R.id.editText1);

String _str = _text.getText().toString();

Long _sec = Long.parseLong(_str);

// даем команду на вибрацию в течение определенного времени _vibrato.vibrate(_sec*1000); // < параметр дается в миллисекундах Toast.makeText(this, «Вибрируем…»,Toast.LENGTH_SHORT).show();

}

Метод hasVibrator

Если мы работаем с API не ниже 11-го, то хорошим тоном будет вставить в код проверку, есть ли вообще на данном устройстве вибратор. Для этого предназначен метод hasVibrator, который возвращает булевское значение – true, если сматрфон умеет вибрировать, false – если не умеет.

Например, вышеприведенный код можно модифицировать следующим образом:

public void onVibroButtonClick(View view)

{

// создаем экземпляр класса Vibrator

Vibrator _vibrato = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

//нужно проверить, есть ли на устройстве вибратор boolean _isVibroDevice = _vibrato.hasVibrator();

// только с 11-го API, остальные функции можно использовать на младших версиях

if (_isVibroDevice) // < если есть вибратор

{

Toast.makeText(this, «Вибрируем…», Toast.LENGTH_SHORT).show();

TextView _text = (TextView)findViewById(R.id.editText1);

Long _sec = Long.parseLong(_text.getText().toString());

_vibrato.vibrate(_sec*1000); // параметр задается в миллисекундах

}

else

{

Toast.makeText(this, «Здесь нет вибратора», Toast.LENGTH_SHORT).show();

}

}

Перегрузка метода vibrate

Существует ещё один способ заставить вибрировать свой телефон. Речь идет об использовании паттернов – последовательностей чисел, задаваемых массивом Long, где каждое число означает период, в течении которого телефон вибрирует или не вибрирует. То есть, нулевой элемент является количеством миллисекунд, когда вибратор не работает (чаще всего его делают равным нулю), первый элемент – количество миллисекунд, когда он работает, второй элемент – опять пауза, третий – опять вибрируем и т.д.

Паттерн-массив идет первым параметром метода vibrate. Второй параметр – целое число, которое говорит, сколько раз нам нужно повторять паттерн, или -1, если его не нужно повторять. Для демонстрации накинем на третью кнопку нашего проекта следующий код:
public void onPatternButtonClick(View view)

{

// создаем экземпляр класса Vibrator Vibrator _vibrato = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// создаем паттерн (шаблон) — массив типа Long long[] _pattern = {0, 1000, 2000, 3000, 5000, 6000};

// и «проигрываем» его виброзвонком _vibrato.vibrate(_pattern, -1);

// < второй параметр показывает, сколько раз повторять паттерн, -1 — не повторять

}

Паттерны вибро нужны для того, чтобы создавать различные вибрации для различных событий интерфейса или уведомлений. Хотя при наличии должной фантазии с помощью последовательностей пауз и длительностей вибраций можно хоть музыку писать.

Метод cancel

Класс Vibrator также содержит метод cancel, который останавливает любое действие, любую вибрацию, актуальную для вибро на смартфоне. Это нужно, например, когда мы задаем вибрацию, которая длится до реакции пользователя, а после его реакции стоит остановить вибрирование. Поэтому на событие, связанное с действием пользователя, накидывают вызов Vibrator.cancel(). Например, у нас это будет нажатие кнопки «Стоп», для которой у нас будет вот такой обработчик:

public void onStopButtonClick(View view)

{

// создаем экземпляр класса Vibrator Vibrator _vibrato = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// преждевременная отмена вибрации _vibrato.cancel();

}

P. S.: А вот так выглядят эти самые вибраторы, которые находятся внутри наших устройств на базе Android:

Они представляют собой моторчик с грузиком-эксцентриком, у которого смещен центр тяжести относительно оси вращения. Раньше вибромоторчик располагался в одном корпусе с аккумулятором. Но в современных моделях он идет отдельной частью. А, к примеру, некоторые модели телефонов от Sony вообще обходились без вибромоторов – производители заменили их… звуком особой частоты из динамиков устройства. P. P. S.: Если кому-то название заметки показалось вульгарным, то стоит вспомнить о приложении MyVibe для iPhone, которое одним из первых получило рейтинг «для взрослых» на App Store. Это приложение представляло собой продвинутый менеджер вибро на iPhone и было предназначено…  Да, для этого самого.
Скачать пример из статьи vibrato

Поделиться:
Нет комментариев
×
Рекомендуем посмотреть