Как некоторые приложения тревоги, такие как Alarmy, могут воспроизводить звук на iPhone, когда приложение находится в фоновом режиме, а телефон работает на вибрации - PullRequest
0 голосов
/ 01 июня 2018

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

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

В последнее время я видел, что некоторые приложения могут воспроизводить звук в определенное время, даже если приложение находится в фоновом режиме.Одним из таких приложений является Alarmy приложение тревоги.Я не думаю, что они воспроизводят музыку через локальное уведомление, когда истекает тревога, потому что музыка продолжает играть даже после того, как я очистил уведомление.Из документации локальных уведомлений я понял, что не могу запустить какой-либо код, когда локальное уведомление срабатывает, пока пользователь не нажмет на уведомление.Поэтому я не могу запустить аудиоплеер, который может воспроизводить звук с вибрацией.

Как такие приложения могут воспроизводить звук, даже если телефон включен, а приложение работает в фоновом режиме?IOS

1 Ответ

0 голосов
/ 06 июня 2018

Существует несколько способов реализации такого рода функций. Для справки я рекомендую эту ссылку.

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

Прежде всего, убедитесь, что в возможности включен режим звукового фона, чтобы воспроизводить звук в фоновом режиме.

Затем

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 делает так, чтобы приложение обрабатывало параметры дистанционного управления, такие как кнопки воспроизведения / паузы на экране блокировки, чтобысделать так, чтобы нашему пользователю было легче отключить звук будильника, когда он проснется.

...