Главная » Используем в приложении физические кнопки устройства | |
У многих приложениях разработчики применяют для разных задач действия физических кнопок устройства. Например, в любимой всеми читалке Cool Reader кнопками громкости "Вверх/Вниз" можно переключать страницы книги. Это очень даже удобно и прикольно, плюс к тому, что вам самим решать, каким функционалом оснастить свое приложение и какую роль в нем будут играть физические кнопки Android аппарата. Поэтому сегодня мы научимся программно обрабатывать нажатия по физическим кнопкам устройства, придавая им желаемый функционал. Обработка нажатий всех физических кнопок аппарата происходит с помощью метода onKeyDown (), используя в нем команду KeyEvent, с помощью которой происходит обращение к желаемой кнопке. Если перечислить основные кнопки современного Android устройства, а их количество стремительно уменьшается, то можно выделить такие основные кнопки и код для обращения к ним: - кнопка питания - вызывается с помощью команды KEYCODE_POWER, служит для включения/выключения перезагрузки устройства, ее использования в приложениях не происходит, потому, что она используется системой только для указанных производителем задач (также как и кнопка Home - KEYCODE_HOME); - кнопка "Назад" - служит для возвращения к предыдущему экрану - вызывается командой KEYCODE_BACK; - кнопка "Меню" - показывает меню для действующей activity, вызывается командой KEYCODE_MENU; - кнопка "Поиск" - вызывает окно поиска (сейчас ее почти нигде не увидишь), команда KEYCODE_SEARCH; - громкость "Вверх/Вниз" - по умолчанию регулирует громкость устройства в медиа, системных звуках, громкости вызова и т.д., может быть применена и для абсолютно других целей (вспоминаем Cool Reader), для работы с этими клавишами служат команды KEYCODE_VOLUME_UP, KEYCODE_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 () и его реализация проста как дважды два. Ну вот и все на этот раз, удачи в учениях! | |
|
Всего комментариев: 0 | |