Доступ до вібродзвінка
Насамперед у маніфесті необхідно встановити дозвіл android.permission.VIBRATE:
<uses-permission android:name="android.permission.VIBRATE"/>
Далі в коді викликається системний сервіс VIBRATOR_SERVICE для доступу до вібродзвінка. Після чого можна викликати необхідні методи.
Наприклад, включити віброрежим на одну секунду:
long mills = 1000L;
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(mills);
Можна також використовувати певний шаблон, наприклад, 500 мілісекунд на затримку перед вібродзвінком, потім вібродзвінок на 300 мілісекунд і так далі. Другий параметр - номер елемента в масиві, з якого виконувати постійні повторення. Щоб повторень не було, використовуйте значення -1.
long[] pattern = { 500, 300, 400, 200 };
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern, 2);
Якщо ви запустите попередній код, то вібрація буде працювати і після закриття програми. Щоб уникнути такої ситуації, потрібно не забувати скасовувати вібродзвінок. Для скасування вібрації використовується метод cancel(). Наступний код запускає вібрацію на дві секунди при натисканні на кнопку, при відпусканні пальця раніше часу вібрація припиняється:
Button button = (Button) findViewById(R. id.button);
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN) {
vibrator.vibrate(2000);
}else if(action == MotionEvent.ACTION_UP) {
vibrator.cancel();
}
return true;
} });
Непогано б також перевірити наявність вібродзвінка (наприклад, електронна книга не має вібродзвінка) за допомогою методу hasVibrator().
Тактильний зворотній зв'язок
Можливо ви помічали, що при натисканні на системні клавіші, наприклад, кнопка BACK, система відповідає вам тактильним зворотним зв'язком. По суті це теж включення вибромотора на короткий проміжок часу. Дана функціональність закладена у Налаштуваннях | Звук | Зворотній зв'язок (для телефону Galaxy S2, в інших шукайте подібне).
Ви можете включити підтримку зворотного зв'язку і для своїх компонентів у додатку. Зверніть увагу, що вам не потрібно встановлювати дозвіл на використання вібрації. Це підійде для тих випадків, коли користувач страждає параноєю і його лякає список дозволів при установці програми.
Для порівняння додайте в розмітку дві кнопки. Першу кнопку залиште в спокої, а в другій пропишіть android:hapticFeedbackEnabled="true":
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hapticFeedbackEnabled="true"
android:onClick="onClick"
android:text="Button2" />
Тепер створимо обробник натиснення кнопки і напишемо в ньому код:
public void onClick(View v) {
Button button2 = (Button) findViewById(R. id.button2);
button2.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
Запускаємо приклад і по черзі натискаємо на дві кнопки - відчуйте різницю.
Підтримку зворотного зв'язку можна включити також програмно через метод View.setHapticFeedbackEnabled(true), який є аналогом вищезазначеного атрибута.
Існують і інші константи, крім VIRTUAL_KEY.
Якщо на телефоні у налаштуваннях відключено зворотний зв'язок або вібромотор відсутній, то даний код не викличе помилки, а буде просто проігноровано.
Не забувайте, що вібрацію також можна використовувати у повідомленнях.