СД
Қаз. 17, 2016, 3:42 Т.Қ.

Установка на паузу звука при сворачивании приложения на мобильных

Android, qml, Qt, sound

В игрушке устанавливаю бесконечно повторяющийся фоновой звук, на десктопах логично, что свернутое окно продолжает работать и воспроизводит звук, но на мобильных при переключении на другое приложение, в предыдущем следует отключать звук и ставить игру на паузу (если, конечно, речь не о музыкальном плеере). Есть возможность простым способом отловить перемещение приложения в фон, чтобы поставить игру на паузу, либо, хотя бы выключить звук?

На данный момент представляю себе только способ с переназначением java функций для андроид, где перехватывать событие onPause.

Нашёл готовую функцию для выхода звук в V-Play http://v-play.net/doc/vplay-backgroundmusic/ однако это является проприетарным ПО.

Как вариант для себя вижу в AndroidManifest.xml установить, чтобы приложение закрывалось при переключении, что заодно будет и выключать звук, а состояние игры хранить и при повторном запуске игры восстанавливать.

0

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

3
Evgenii Legotckoi
  • Қаз. 17, 2016, 8:03 Т.Қ.

Нужно использовать переназначение java функций. Правда, лично я так и не добрался до этого. Сейчас занимаюсь разработкой под десктоп.

С AndroidManifest.xml не вижу смысла такое делать. Если маленькая игра, то хранить состояние ещё можно, а если проект тяжеловесный, то это изначально провальный путь.

    СД
    • Қаз. 18, 2016, 2:31 Т.Ж.
    Всёже получилось найти фунцию QGuiApplication::applicationStateChanged умеющую посылать сигнал при изменении статуса приложения. Для десктопов она тоже работает.
    Здесь даже есть пример работы из QML.
    Надо лишь определять, является ли устройсво мобильным и при сворачивании ставить музыку на паузу)
      СД
      • Қаз. 18, 2016, 3:21 Т.Ж.
      • Жауап шешім ретінде белгіленді.

      Оказалось, можно даже не делать проверку на тип устройства. Статус 0 (остановлен) я поймал только на андроид, в десктопной системе только 4 (работает) и 2 (пауза) используется.
      Поэтому достаточно подобного кода:

          Connections {
              target: Qt.application
              onStateChanged: {
                  if (Qt.application.state === 0) {
                      playMusic.pause()
                  } else {
                      playMusic.play()
                  }
              }
          }

       

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз