Существует несколько способов реализации такого рода функций. Для справки я рекомендую эту ссылку.
Для фактического воспроизведения звука, когда переключатель вызова устройства настроен на вибрацию.
Прежде всего, убедитесь, что в возможности включен режим звукового фона, чтобы воспроизводить звук в фоновом режиме.
Затем
Swift 4
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.duckOthers, .defaultToSpeaker])
try AVAudioSession.sharedInstance().setActive(true)
UIApplication.shared.beginReceivingRemoteControlEvents()
} catch {
NSLog("Audio Session error: \(error)")
}
Здесь мы устанавливаем категорию общего аудио-сеанса на AVAudioSessionCategoryPlayAndRecord , так что мы можем воспроизводить звук, в то время как переключатель звонка устройства установлен на вибрацию.
.duckOthers определено, чтобы сделать другой звук тише, если воспроизводится какой-либо смешиваемый звук, так что наша тревога может быть услышана.Вы можете пропустить это или использовать другую опцию, если вы предпочитаете другое поведение.
Указан .defaultToSpeaker , чтобы громкость доходила до динамика, где он будетнамного громче и должен легко разбудить нашего пользователя.
beginReceivingRemoteControlEvents делает так, чтобы приложение обрабатывало параметры дистанционного управления, такие как кнопки воспроизведения / паузы на экране блокировки, чтобысделать так, чтобы нашему пользователю было легче отключить звук будильника, когда он проснется.