Воспроизведение звука только при включенном кольце - PullRequest
0 голосов
/ 08 сентября 2018

Я работаю над приложением с фортепианной клавиатурой. Я хочу, чтобы звук после нажатия клавиш воспроизводился только тогда, когда на ринге включен переключатель «Звонок / Без звука» Тогда он должен остановить фоновую музыку из других приложений. Если переключатель «Звонок / Без звука» находится в режиме «без звука», он ничего не должен делать и позволяет воспроизводить фоновую музыку из других приложений (например, Spotify).

Что я пробовал (с Spotify в качестве фоновой музыки):

Вариант 1 [AVAudioSessionCategoryAmbient]:

  • Переключатель «Звонок / Без звука» включен: фоновая музыка не останавливается и воспроизводит звук в приложении вместе с фоновой музыкой (-> Что я не хочу)

  • Переключатель «Звонок / Без звука» отключен: фоновая музыка не останавливается и не воспроизводятся звуки в приложении (-> Что я хочу)

Вариант 2 [AVAudioSessionCategorySoloAmbient]:

  • Переключатель «Звонок / Без звука» включен: фоновая музыка останавливается и воспроизводится звук в приложении (-> Что я хочу)

  • Переключатель «Звонок / Без звука» отключен: фоновая музыка останавливается, но звуки в приложении не воспроизводятся (-> Что я хочу, это не должно останавливать фоновую музыку)

Я думаю, что вариант 2 - самый близкий вариант, который я могу получить. IPhone не должен останавливать фоновую музыку, когда переключатель «Звонок / Без звука» включен, и я был бы счастлив.

Вариант 3 [AVAudioSessionCategoryPlayback]:

  • Включен переключатель «Звонок / Без звука»: фоновая музыка останавливается и воспроизводится звук в приложении (-> Что я хочу)

  • Переключатель «Звонок / Без звука» отключен: фоновая музыка останавливается и воспроизводится звук в приложении (-> Что я не хочу)


Мой код:

let NoteSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: currentNote.sound, ofType: "m4a")!)
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
    try AVAudioSession.sharedInstance().setActive(true)
    audioPlayer = try AVAudioPlayer(contentsOf: NoteSound as URL)
    audioPlayer.prepareToPlay()
    audioPlayer.play()
} catch {
    print("Problem in getting File")
}

В примере кода я только изменил .setCategory().

1 Ответ

0 голосов
/ 08 сентября 2018

Нет встроенного API для проверки, включен ли телефон Без звука или нет, и вам не рекомендуется основывать функциональность вашего приложения на таком выборе пользователя (В режиме низкого заряда батареи, Зарядка или нет, .. .).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...