[Из песочницы] Qt Android и системный диалог управления звуком

Речь, конечно же, пойдёт не о том, что можно в приложении поймать событие нажатой клавиши и просто задать уровень звука. Дело в том, что можно работать с приложением и на фоне слушать музыку, запущенную на плеере. Или просто один раз исправить файл системны — и оно всегда будет работать. Необходимо, чтобы при нажатии на клавиши регулировки уровня звука на устройстве, менялся системный уровень звука (ну там, выпрыгивал регулятор громкости и т.д.; ну, вы меня поняли).На момент написания статьи на русскоязычных сайтах ничего не было. Нашёл только на каком-то отдалённом заморском форуме, и то прописано было не полностью, пришлось самому доводить до ума.

Итак, приступим.Необходимо зайти в папочку, где установлен Qt. Вот тут внимательно: не SDK, не где складируются откомпиленые проги, а именно сам Qt.

Там заходим в папочку 5.Х.Х (Где Х — это номер версии, у меня 5.2.1). Здесь заходим в папку где указано имя собирателя, которым вы пользуетесь для Android (у меня это android_armv7), а далее проходим следующий путь вложенных папок: \src\android\java\src\org\qtproject\qt5\android\bindings\

Вот мы и на месте. В папке открываем на редактирование файл QtActivity.java.После строки:

import java.io.DataInputStream; Примерно 36-я строка, вставляем следующий код: import java.io.DataInputStream; После строки: import android.graphics.Canvas; Примерно 62-я строка, вставляем следующий код: import android.media.AudioManager; Далее, где объявляются разные объекты (я это сделал в 112 строке), необходимо вставить следующий код: private AudioManager audio; И напоследок, находите в коде функцию onKeyDown и в её начале вставляете код: switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: audio.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); return true;

case KeyEvent.KEYCODE_VOLUME_DOWN: audio.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); return true; } Это, по моему, единственный кусок, взятый из статьи на форуме.В общем итоге функция будет иметь следующий вид:

public boolean onKeyDown (int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: audio.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); return true;

case KeyEvent.KEYCODE_VOLUME_DOWN: audio.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); return true; } if (QtApplication.m_delegateObject!= null && QtApplication.onKeyDown!= null) return (Boolean) QtApplication.invokeDelegateMethod (QtApplication.onKeyDown, keyCode, event); else return super.onKeyDown (keyCode, event); } Ну, вот и все. Теперь пересоберите свои проекты для Android и радуйтесь отображению диалога уровня звука при его регулировке.На всякий случай привожу ссылку на форум, где это было найдено. Всё работает, проверено.

В следующий раз напишу про Манифест.

© Habrahabr.ru