Comments 14
>>> а далее проходим следующий путь вложенных папок: \src\android\java\src\org\qtproject\qt5\android\bindings\
Выглядит кастыльно. При обновлении Qt — все занова? А при работе в команде, вы будете этот файл кидать другу и говорить положи его туда-сюда?
Честно скажу толком не знаю решения, но все-же не лучше ли воспользоваться jni?
Выглядит кастыльно. При обновлении Qt — все занова? А при работе в команде, вы будете этот файл кидать другу и говорить положи его туда-сюда?
Честно скажу толком не знаю решения, но все-же не лучше ли воспользоваться jni?
При работе в команде сборка проекта должна производиться на одном сервере и не зависеть от настроенного окружения на компе конкретного разработчика.
И разработчики обязаны сами следить, чтобы их окружение соответствовало эталонному, как на сборочном сервере.
Но вы правы в том, что лучше избегать правок стандартного окружения
И разработчики обязаны сами следить, чтобы их окружение соответствовало эталонному, как на сборочном сервере.
Но вы правы в том, что лучше избегать правок стандартного окружения
Наследоваться просто надо было от этого QtActivity и нужное добавлять уже в своих, проектных исходниках.
После строки:
import java.io.DataInputStream;
Примерно 36-я строка, вставляем следующий код:
import java.io.DataInputStream;
Разорвало шаблон. Вы, видимо, опечатались?
Мне тоже кажется, что это костыль. Ибо скорее всего, где-то в Qt клавиши громкости уже перехватываются, а надо избавиться от перехвата и передать эти нажатия системе. Вы же придумали костыль, с помощью которого регулируете громкость одного из потоков звука.
Скорее всего, надо просто вместо вашего switch'а сделать так:
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
return super.onKeyDown(keyCode, event);
П.С.: Извиняюсь, парсер Хабра не хочет принимать от меня разметку.
Скорее всего, надо просто вместо вашего switch'а сделать так:
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
return super.onKeyDown(keyCode, event);
П.С.: Извиняюсь, парсер Хабра не хочет принимать от меня разметку.
Ну, вот и все. Теперь пересоберите свои проекты для Android и радуйтесь отображению диалога уровня звука при его регулировке.
К сожалению, не всё. Если вы обновитесь до Qt 5.4.0, то с удивлением обнаружите, что ваш костыль отвалился.
Виной тому исправление вот этого «бага»: bugreports.qt.io/browse/QTBUG-36570
Кстати, исправление весьма занятное. Теперь при нажатии клавиш VOLUME_UP и VOLUME_DOWN априори вызывается регулировка системной громкости откуда-то из недр Qt'а. И я пока не нашёл способа, как это отключить или изменить поведение нажатия клавиш на то, чтобы была возможность регулировать этот самый STREAM_MUSIC, как в посте у топикстартера. Максимум чего я добился — одновременной регулировки STREAM_MUSIC и системной громкости. Буду рад, если кто-то подскажет решение этой проблемы для Qt 5.4.0 и выше.
Здесь заходим в папку где указано имя собирателя, которым вы пользуетесь для Android (у меня это android_armv7), а далее проходим следующий путь вложенных папок: \src\android\java\src\org\qtproject\qt5\android\bindings\
Ой, зачем же так сложно?
Во-первых, править какие-либо файлы входящие в состав SDK — весьма плохой тон. Я вообще на всякий случай присваиваю этим файликам атрибут «Только для чтения».
Во-вторых, ваше решение будет затрагивать абсолютно все ваши Android-проекты на Qt, а это может иметь побочные эффекты.
Для подобных хаков в «QtActivity.java» достаточно его просто вынести в свой проект. То есть в директории вашего проекта создать каталог android/src/org/qtproject/qt5/android/bindings с похаченным файлом «QtActivity.java» и он подхватится при сборке apk-пакета.
Таким образом и
Целиком с вами согласен. Сверху меня за это заминусовали вон.
Кстати. Достаточно сделать так:
setenv(«QT_ANDROID_VOLUME_KEYS»,«value», 1);
QApplication app(argc, argv);
Все станет как раньше.
А вообще лучше перехватить так:
bool MyEventFilter::eventFilter(QObject *Object, QEvent *Event)
// тут вызывать что надо через JNI для Qt::Key_VolumeUp
Кстати. Достаточно сделать так:
setenv(«QT_ANDROID_VOLUME_KEYS»,«value», 1);
QApplication app(argc, argv);
Все станет как раньше.
А вообще лучше перехватить так:
bool MyEventFilter::eventFilter(QObject *Object, QEvent *Event)
// тут вызывать что надо через JNI для Qt::Key_VolumeUp
Ну т.е. если выставить setenv(«QT_ANDROID_VOLUME_KEYS»,«value», 1);, то не будет «VOLUME_UP и VOLUME_DOWN априори вызывается регулировка системной громкости откуда-то из недр Qt'а»
Я у себя так делал:
1) Унаследовался от QtActivity и в манифесте прописал свой класс как основное Activity
2) В onCreate у своего activity написал this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
После этого будет появляться диалог регулировки. Но я делал STREAM_MUSIC, т.к. в приложении аудио проигрывалось и нужен был регулятор громкости, а вообще другие приложения используют STREAM_RING кажется.
1) Унаследовался от QtActivity и в манифесте прописал свой класс как основное Activity
2) В onCreate у своего activity написал this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
После этого будет появляться диалог регулировки. Но я делал STREAM_MUSIC, т.к. в приложении аудио проигрывалось и нужен был регулятор громкости, а вообще другие приложения используют STREAM_RING кажется.
Sign up to leave a comment.
Qt Android и системный диалог управления звуком