iOS 4闹钟应用程序,支持多任务处理

coc*_*her 12 iphone objective-c multitasking ios4

我正在制作一个具有多任务支持的闹钟应用程序.但是,我坚持使用sdk的一些限制.

每当警报时间到达用户设置的某些属性时,我需要播放选定的警报声.这些属性: - 警报声可以是来自用户iPod库的音乐,也可以是应用程序包中的一些声音文件. - 可以将闹钟声音设置为渐进式播放.

此外,警报声必须在循环中在后台播放,直到用户取消或唤醒应用程序.

我想到的第一个合乎逻辑的事情就是使用本地通知,但是通过本地通知,您可以播放仅在应用程序包(不是iPod音乐)中且最长30秒的声音文件.当用户取消通知警报时,您也不会收到通知,iOS只是停止播放您的声音.

现在我正在考虑使用背景音频播放选项并播放静音直到闹钟时间,然后播放闹钟声音,同时还显示没有声音的本地通知.但我又如何知道用户是否取消了本地通知提醒并停止播放音频.但是根据Apple的文档,播放背景音频的应用程序仍然不允许播放iPod音乐(以及使用共享资源).

我也无法理解其他一些应用程序是如何做这些功能的.例如,Night Stand HD可以在后台播放iPod音乐,名为"Progressive Alarm Clock"的应用程序可以在后台播放渐进式声音.

关于这些问题的任何想法和建议?非常感谢您的任何帮助

Rob*_*und 4

我想说,在 iOS 当前的限制下,你想做的事情是不可能的。也就是说,您可以通过执行渐进式闹钟的开发人员所做的操作来播放渐进式闹钟,从而伪造渐进式闹钟。通过安排许多本地通知,一个接一个。他将警报声音分成多个片段(例如 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];
Run Code Online (Sandbox Code Playgroud)

这将首先显示一条通知,并在 15 秒后播放默认声音。5 秒后,声音将再次播放。通过拥有一堆音量不断增加的声音文件,只需安排更多本地通知就可以伪造渐进式声音。当然,只有当您的闹钟声音可以轻松分成多个块时,这才有效,就像渐进式闹钟中的铃声一样。遗憾的是,您无法通过点击通知中的“取消”来取消闹钟。您必须启动应用程序才能执行此操作。