Подтвердить что ты не робот

Приложение для будильника iOS 4 с поддержкой многозадачности

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

Мне нужно воспроизвести выбранный звуковой сигнал, когда время тревоги приходит с некоторыми свойствами, заданными пользователем. Эти свойства: - Звук тревоги может быть музыкой из пользовательской библиотеки iPod, а также некоторыми звуковыми файлами в комплекте приложений. - Звук будильника можно настроить как прогрессивный.

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

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

Теперь я подумываю использовать фоновый режим воспроизведения звука и играть молчание до времени будильника, а затем воспроизводить звуковой сигнал, одновременно отображая локальное уведомление без звука. Но опять же, как я узнаю, отменяет ли пользователь уведомление о локальном уведомлении и прекращает воспроизведение аудио. Однако, согласно документации Apple, воспроизведение музыки iPod (и использование общих ресурсов) по-прежнему не разрешено для приложения, воспроизводящего фоновый звук.

Я также не понимаю, как некоторые другие приложения выполняют некоторые из этих функций. Например, Night Stand HD может воспроизводить музыку iPod в фоновом режиме, а приложение под названием "Progressive Alarm Clock" может воспроизводить прогрессивный звук в фоновом режиме.

Любые идеи и предложения по этим вопросам? Любая из вашей помощи будет с благодарностью

4b9b3361

Ответ 1

Я бы сказал, что то, что вы хотите сделать, невозможно с текущими ограничениями iOS. Тем не менее, вы, вероятно, можете подделать прогрессивную тревогу, выполняя то, что разработчик Progressive Alarm Clock делает для прогрессивной тревоги. Планируя множество локальных уведомлений, один за другим. Он разделил звуки тревоги на куски, скажем, по 10 с каждый с прогрессивными уровнями громкости. Это очень грубый пример того, как можно подделать прогрессивную тревогу.

UILocalNotification *notif1 = [[UILocalNotification alloc] init];
notif1.fireDate = [NSDate dateWithTimeIntervalSinceNow:15];
notif1.soundName = UILocalNotificationDefaultSoundName;
notif1.alertBody = @"Alarm";
[[UIApplication sharedApplication] scheduleLocalNotification:notif1];
[notif1 release];

UILocalNotification *notif2 = [[UILocalNotification alloc] init];
notif2.fireDate = [NSDate dateWithTimeIntervalSinceNow:20];
notif2.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:notif2];
[notif2 release];

Сначала будет отображаться уведомление и воспроизведение звука по умолчанию через 15 секунд. Через 5 секунд звук снова будет воспроизводиться. Имея кучу звуковых файлов, где объем увеличивается, прогрессивный звук можно подделать, только планируя больше локальных уведомлений. Это, конечно, будет работать только в том случае, если у вас есть звуковой сигнал тревоги, который можно легко разделить на куски, точно так же, как колокола в Progressive Alarm Clock. К сожалению, вы не можете отменить будильник, нажав на отмену в уведомлении. Для этого нужно запустить приложение.

Ответ 2

Независимо от того, что делает разработчик Progressive Alarm Clock, это не то, что описывает Роберт Хёглунд, AFAIK, поскольку сигнал тревоги будет звучать, даже если телефон находится в тишине, а UILocalNotification, похоже, не имеет возможности это разрешить. Кроме того, если вы убьете приложение вручную во время ожидания будильника, приложение уведомит вас о необходимости перезапуска приложения. Кажется, это говорит о том, что он должен каким-то образом работать в фоновом режиме.