2014-09-01 4 views
4

Я разрабатываю приложение webradio Android/iOS с Qt Quick в qml. Для воспроизведения моего радиопотока я использую элемент qml MediaPlayer, и я бы хотел добавить ползунок для управления громкостью воспроизведения музыки.Qt Android/iOS: как управлять объемом устройства в qml

На данный момент я попытался использовать ссылку ползунка к свойству тома MediaPlayer, но это не регулирует громкость устройства. Действительно, в Android, как и в iOS, при изменении значения ползунка изменяется только громкость MediaPlayer. И когда я нажимаю кнопки регулировки громкости устройства, на слайдер не влияет.

Что я хочу - это ползунок, с помощью которого я мог видеть и контролировать громкость устройства, а не только объем элемента MediaPlayer.

Кто-нибудь знает, как это сделать?

+0

Для этого может быть более простой и кросс-платформенный способ, но можно использовать Java Native Interface (JNI), чтобы иметь возможность вызывать код Java/Android API из вашей программы. Я уверен, что есть что-то подобное для iOS. Сообщите нам, если вы это выясните =) – Phat

ответ

0

На сегодняшний день Qt, похоже, не поддерживает установку глобального тома устройства из QML ни на C++. Вы можете установить только объем отдельных потоков аудио, генерируемых через Qt. Лучше всего было бы подключить сигнал вашего слайдера к классу C++ и оттуда запустить собственный код iOS/Android, чтобы установить громкость устройства.

Вы можете проверить это question, в котором объясняется, как это сделать на iPhone. Что-то подобное также доступно для Android.

Для кросс-платформенной поддержки вы должны сделать это по-старому, что означает, что класс, обрабатывающий том, должен иметь доступ к универсальному интерфейсу, который не зависит от платформы и имеет множество реализаций для каждой платформы, которую вы хотите поддерживать. Решение о том, какую платформозависимую реализацию выбрать, должно быть сделано при компиляции.

Как я уже сказал, это уже в начале 2015 года. Qt быстро развивается, и вы вскоре увидите новый класс в QtMultimedia, который обрабатывает его для всех платформ.