Как начать воспроизведение аудио в бесшумном режиме и заблокирован в iOS 6? - программирование
Подтвердить что ты не робот

Как начать воспроизведение аудио в бесшумном режиме и заблокирован в iOS 6?

Процесс конечного пользователя

  • Откройте приложение
  • Включить "Тихий режим".
  • Нажмите кнопку "Lock-button"
  • Приложение все еще может начать воспроизведение звука по прошествии нескольких часов, а не проигрывать аудио в промежуточный период.

Приложения, которые делают это

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

  • Будильник Pro
  • Мои часы
  • Тревожный сигнал
  • Встревоженный
  • Ihome
  • ...

... Сохраняют ли они цикл после блокировки каким-либо образом, или как уведомление (которое не может воспроизводить звук без звука), запуская приложение обратно для воспроизведения звука или какого-либо другого метода?

Реализованные текущие методы

AVAudioPlayer, используя:

AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(YES);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);

И настройка Info.plist на:

Необходимые фоновые режимы (UIBackGroundModes) - приложение воспроизводит аудио (аудио)

В настоящее время

Я могу воспроизводить звук даже в тишине, когда приложение работает и на экране. Если звук уже запущен, приложение может быть закрыто кнопкой "домой", и звук будет запущен. НО, если приложение не воспроизводит звук, а экран заблокирован, все потоки убиты, а звук никогда не воспроизводится. Как приложениям тезисов удается обойти это?

Возможные подходы, найденные до сих пор

а. Используйте 'beginBackgroundTaskWithExpirationHandler:' с бесконечным циклом, чтобы приложение работало бесконечно.

Плюсы:

  • Похоже, вы можете сделать эту работу во многих ситуациях, даже когда пользователь нажимает на нее.

Минусы:

  • Это касается политики Apple, насколько я могу судить.
  • будет использовать больше ресурсов

Комментарии:

У меня почти есть это, чтобы работать и, возможно, с некоторой настройкой. Кажется, это не то, что делают все эти другие тревоги, так как они не продолжают работать, если вы нажмете домой BTN. Что подсказывает, что они используют какой-то метод, который дает им разрешение на запуск в то время как заблокировано, но не в BG. (Это то, что мне нужно)

Кроме того, когда вы спрашиваете, сколько времени у вас осталось, вы получите 10 минут. Отбрасывая бесконечный цикл там, числа будут фактически работать до 0, а затем переходить в негативы в течение нескольких часов подряд. (Проверено) Я не уверен, как это будет вести себя в реальном мире или с точки зрения принятия приложений.

В. Используйте звуковую петлю без звука, чтобы позиционировать в качестве медиа-центра воспроизведения аудио в формате Continus

Плюсы:

  • Работает при блокировке и будет работать в большинстве ситуаций.

Минусы:

  • Может прерываться, если прерывается другим медиацентром и в некоторых других случаях.
  • Можно также перейти к политике Apple.

Комментарии:

Это может сработать много ситуаций, но далеко не идеальное. И поскольку, как я уже сказал, должен быть другой метод, который не документирован.

Конфлуктуации Таким образом, Far

Тестирование с помощью перечисленных APP предполагает, что они не используют ни один из двух описанных мной методов. Метод "A" кажется ближе, но если он не будет вести себя так, как ведут себя эти приложения.

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

Благодарим вас

Любое понимание будет оценено и для вашего участия до сих пор.

4b9b3361

Ответ 1

Вам нужно сделать пару изменений в файле plist.

то есть. 1) Установите требуемый фоновый режим, чтобы приложение воспроизводило аудио

2) set Приложение не работает в фоновом режиме с YES.

 NSError *setCategoryErr = nil;
    NSError *activationErr  = nil;
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
    [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];

Затем вам нужно написать много кода в AppDelege

Теперь вы можете легко запускать звук во время блокировки экрана телефона или в фоновом режиме.

Ответ 2

Если вы ранее делали это в своем приложении:

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
    AudioSessionSetActive(true);

    // Allow playback even if Ring/Silent switch is on mute
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                             sizeof(sessionCategory),&sessionCategory);

У меня был пользователь, который сказал мне, что звук не работает над приложением (задолго до iOS5!). Выключенное кольцо/тихий переключатель было настроено на "тихий". Поэтому я добавил этот код, и это приводит к переопределению параметра "silent". Это полезно, если у вас есть музыкальное приложение, например, и вы хотите, чтобы музыка продолжала воспроизводиться.

Ответ 3

Долгое решение для этого может быть обоснованием на основе местоположения. В основном используйте фоновую службу местоположения, чтобы оправдывать периодические обновления вашего приложения и, таким образом, вызывать тревогу. Это может быть оправдано для Apple, включив такую ​​функцию, как Weather updates, для которой требуются службы определения местоположения.

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

Счастливая охота.

Ответ 4

Просто проверьте, нет ли в вашем коде этой строки:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

Ответ 5

Зарегистрировали ли вы приложение, если вам нужно использовать аудио в фоновом режиме?

Из документов:

A: Я использую MPMoviePlayerController для воспроизведения аудио-фильмов и другие аудиофайлы на iPhone в iOS 4. Как я могу обеспечить свой звук продолжит воспроизведение, когда мое приложение будет переключено на фон или экран заблокирован?

Во-первых, вы должны заявить, что ваше приложение поддерживает фоновый выполнение. Приложение делает это, включая UIBackgroundModes ключ в файле Info.plist. Этот ключ определяет, какие фоновые задачи ваше приложение поддерживает. Его значение представляет собой массив, содержащий один или больше строк. Укажите звуковое значение строки, чтобы указать приложение воспроизводит слышимый контент пользователю в фоновом режиме.

Далее. Если вы хотите, чтобы ваш видеоролик продолжался, когда блокировки экрана, вам необходимо назначить соответствующую категорию для вашего аудио сессия. Вы не можете полагаться на звуковую сессию по умолчанию, чья категория (начиная с iPhone OS 2.2) является AVAudioSessionCategorySoloAmbient (или эквивалентно, kAudioSessionCategory_SoloAmbientSound).

Для продолжения воспроизведения, когда экран блокируется, или когда Кольцо/Тихий переключатель находится в "тихом" положении, используйте AVAudioSessionCategoryPlayback (или эквивалент kAudioSessionCategory_MediaPlayback). Листинг 1 демонстрирует как инициализировать аудиозапись приложения с помощью Категория AVAudioSessionCategoryPlayback.

Ответ 6

Посмотрите SystemSoundID; их звук воспроизводится на громкости слайдера "Звонок и оповещения" в "Настройки" > "Звуки", несмотря на громкость, заданную кнопками громкости и тихий режим.

Ответ 7

Я замечаю, что эти приложения очень четко о своих требованиях. Они не будут работать, если только (1) пользователь не разрешает локальные уведомления для этого приложения в настройках > Уведомления и (2) приложение находится на самом переднем плане, когда пользователь блокирует экран (например, они не будут работать, если пользователь нажимает кнопку "Домой", чтобы выйти из приложения, а затем заблокировать экран).

Поэтому это, вероятно, комбинация локального уведомления и тихого звука, играющего в фоновом режиме. Беззвучный звук означает, что, когда экран заблокирован, если приложение было в самом начале, оно не приостанавливается. Таким образом, локальное уведомление отправляется самому приложению, и приложение может реагировать, создавая звуковой сигнал. Или, может быть, нет тишины и звукового сигнала, который вы слышите, это просто звук, прикрепленный к местному уведомлению (но если это так, то мне непонятно, почему приложение должно быть на переднем плане, когда экран заблокирован).

Кроме того, хотя я не тестировал это, поведение тихого переключателя на iPhone, возможно, изменилось в 5.1 в ответ на инцидент Mahler (http://www.nytimes.com/2012/01/13/nyregion/ringing-finally-stopped-but-concertgoers-alarm-persists.html). Это объясняет, почему разработчики комментируют, что они могут сделать это до 5.1.