Приложение для будильника iOS 4 с поддержкой многозадачности - PullRequest
12 голосов
/ 10 октября 2010

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

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 16 ноября 2010

Я бы сказал, что то, что вы хотите сделать, невозможно с текущими ограничениями 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 секунд звук будет воспроизведен снова.Имея кучу звуковых файлов, где громкость увеличивается, прогрессивный звук можно подделать, просто планируя больше локальных уведомлений.Это, конечно, будет работать только в том случае, если у вас есть сигнал будильника, который можно легко разделить на куски, как колокола в Прогрессивном будильнике.К сожалению, вы не можете отменить сигнал тревоги, нажав кнопку «Отмена» в уведомлении.Вы должны запустить приложение, чтобы сделать это.

1 голос
/ 18 декабря 2010

Что бы ни делал разработчик Прогрессивного будильника, это не то, что описывает Роберт Хоглунд, AFAIK, поскольку будильник будет звучать, даже если телефон не работает, и UILocalNotification, похоже, не имеет никакого способа сделать это. Кроме того, если вы убьете приложение вручную во время ожидания сигнала тревоги, приложение сообщит вам, что нужно перезапустить. Кажется, это говорит о том, что он как-то работает в фоновом режиме.

...