Используем в приложении физические кнопки устройства
Главная » Используем в приложении физические кнопки устройства

У многих приложениях разработчики применяют для разных задач действия физических кнопок устройства. Например, в любимой всеми читалке Cool Reader кнопками громкости "Вверх/Вниз" можно переключать страницы книги. Это очень даже удобно и прикольно, плюс к тому, что вам самим решать, каким функционалом оснастить свое приложение и какую роль в нем будут играть физические кнопки Android аппарата. Поэтому сегодня мы научимся программно обрабатывать нажатия по физическим кнопкам устройства, придавая им желаемый функционал. Обработка нажатий всех физических кнопок аппарата происходит с помощью метода onKeyDown (), используя в нем команду KeyEvent, с помощью которой происходит обращение к желаемой кнопке.

Если перечислить основные кнопки современного Android устройства, а их количество стремительно уменьшается, то можно выделить такие основные кнопки и код для обращения к ним:

- кнопка питания - вызывается с помощью команды KEYCODE_POWER, служит для включения/выключения перезагрузки устройства, ее использования в приложениях не происходит, потому, что она используется системой только для указанных производителем задач (также как и кнопка Home - KEYCODE_HOME);

- кнопка "Назад" - служит для возвращения к предыдущему экрану - вызывается командой KEYCODE_BACK;

- кнопка "Меню" - показывает меню для действующей activity, вызывается командой KEYCODE_MENU;

- кнопка "Поиск" - вызывает окно поиска (сейчас ее почти нигде не увидишь), команда KEYCODE_SEARCH;

- громкость "Вверх/Вниз" - по умолчанию регулирует громкость устройства в медиа, системных звуках, громкости вызова и т.д., может быть применена и для абсолютно других целей (вспоминаем Cool Reader), для работы с этими клавишами служат команды KEYCODE_VOLUME_UPKEYCODE_VOLUME_DOWN;

- кнопка камеры, команда KEYCODE_CAMERA;

- кнопка гарнитуры KEYCODE_HEADSETHOOK, как правило служит для запуска и паузы воспроизведения музыки в плеере.

Во времена динозавров (2006 - 2010) было много аппаратуры и с другими кнопками, но сейчас они уже совсем не актуальны.

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

Создаем новый проект, выбираем Blank Activity. В файле activity_main.xml ради приличия создадим своему Android приложению такой сякой интерфейс, состоящий из одного текстового поля:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <TextView
 android:layout_height="wrap_content"
 android:layout_width="wrap_content"
 android:id="@+id/tv"
 android:text="Клацаем физические кнопочки аппарата"
 android:textSize="13pt"
 android:padding="10pt">
 </TextView>
</RelativeLayout>

В файле java класса мы создадим метод  для работы с физическими кнопками устройства onKeyDown, и с помощью команды KeyEvent обратимся к кнопкам громкости, камеры и кнопки "Назад". При нажатии на любую из этих клавиш будет появляться Toast сообщение с названием нажатой кнопки. Все это выполняется довольно просто. Открываем файл MainActivity.java и добавляем следующий код:

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class MainActivity extends Activity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 }
 public boolean onKeyDown(int keyCode, KeyEvent event) {
 switch (keyCode) {
 //Обрабатываем нажатие кнопки увеличения громкости:
 case KeyEvent.KEYCODE_VOLUME_UP:
 Toast.makeText(this, "Нажата кнопка громкости вверх", Toast.LENGTH_SHORT).show();
 return false;
 //Обрабатываем нажатие кнопки уменьшения громкости:
 case KeyEvent.KEYCODE_VOLUME_DOWN:
 Toast.makeText(this, "Нажата кнопка громкости вниз", Toast.LENGTH_SHORT).show();
 return false;
 //Обрабатываем нажатие кнопки камеры:
 case KeyEvent.KEYCODE_CAMERA:
 Toast.makeText(this, "Нажата кнопка камеры", Toast.LENGTH_SHORT).show();
 return true;
 //Обрабатываем нажатие кнопки "Назад":
 case KeyEvent.KEYCODE_BACK:
 //Устанавливаем совместимость более нового метода onBackPressed() с ранними версиями SDK:
 if (android.os.Build.VERSION.SDK_INT
 < android.os.Build.VERSION_CODES.ECLAIR
 && event.getRepeatCount() == 0) {
 onBackPressed();
 }
 }
 return super.onKeyDown(keyCode, event);
 }
 //Обрабатываем нажатие клавиши "Назад" методом специальным методом onBackPressed:
 public void onBackPressed() {
 Toast.makeText(this, "Нажата кнопка Назад", Toast.LENGTH_SHORT).show();

 }
}

Как видите, абсолютно ничего сложного, но используя этот функционал, можно существенно улучшить свое приложение.

Стоит отметить, что на смену старой команде KEYCODE_BACK работы с кнопкой "Назад" пришел специальный метод onBackPressed (), с которым работать еще проще, его можно использовать в любом куске кода без вызова метода onKeyDown () и его реализация проста как дважды два.

Ну вот и все на этот раз, удачи в учениях!

Категория: Уроки программирования | Просмотров: 1019 | Добавил: Oleg | Теги: Android устройство, нажатие клавиш, используем кнопки, физические кнопки | Рейтинг: 3.0/2
Всего комментариев: 0
avatar