Pull to refresh

Comments 14

>>> а далее проходим следующий путь вложенных папок: \src\android\java\src\org\qtproject\qt5\android\bindings\
Выглядит кастыльно. При обновлении Qt — все занова? А при работе в команде, вы будете этот файл кидать другу и говорить положи его туда-сюда?
Честно скажу толком не знаю решения, но все-же не лучше ли воспользоваться jni?
При работе в команде сборка проекта должна производиться на одном сервере и не зависеть от настроенного окружения на компе конкретного разработчика.

И разработчики обязаны сами следить, чтобы их окружение соответствовало эталонному, как на сборочном сервере.

Но вы правы в том, что лучше избегать правок стандартного окружения
Да согласен, просто тут явно можно этого избежать.
Наследоваться просто надо было от этого QtActivity и нужное добавлять уже в своих, проектных исходниках.
После строки:

import java.io.DataInputStream;

Примерно 36-я строка, вставляем следующий код:

import java.io.DataInputStream;


Разорвало шаблон. Вы, видимо, опечатались?
Да, вышла очепятка. Спасибо за подсказку, исправил.
меня больше заинтересовало про
Примерно 36-я строка, вставляем следующий код:

import java.lang.Object;

Мне тоже кажется, что это костыль. Ибо скорее всего, где-то в Qt клавиши громкости уже перехватываются, а надо избавиться от перехвата и передать эти нажатия системе. Вы же придумали костыль, с помощью которого регулируете громкость одного из потоков звука.

Скорее всего, надо просто вместо вашего switch'а сделать так:

if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
return super.onKeyDown(keyCode, event);

П.С.: Извиняюсь, парсер Хабра не хочет принимать от меня разметку.
У меня тоже не принимает парсер =). Условие ни к чему. Оно и так прокидывает нажатия в Qt под видом Qt::Key_VolumeUp Qt::Key_VolumeDown
Вот именно для того, чтобы оно не прокидывало именно эти клавиши надо сделать так, как написал я.
Ну, вот и все. Теперь пересоберите свои проекты для 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-пакета.
Таким образом и овцы целы, и волки сыты SDK нетронут и девственен и вы получили то, что хотели.
Целиком с вами согласен. Сверху меня за это заминусовали вон.

Кстати. Достаточно сделать так:

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 кажется.
Sign up to leave a comment.

Articles