12

我正在制作一个支持多任务处理的闹钟应用程序。但是,我受困于 sdk 的一些限制。

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

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

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

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

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

对这些问题有什么想法和建议吗?您的任何帮助将不胜感激

4

2 回答 2

4

我想说的是,在 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 秒后,声音将再次播放。通过拥有一堆音量增加的声音文件,可以通过安排更多本地通知来伪造渐进式声音。当然,这只有在你有一个可以很容易地分成块的警报声时才有效,就像渐进式闹钟中的钟声一样。不幸的是,您无法通过点击通知中的取消来取消警报。您必须启动应用程序才能做到这一点。

于 2010-11-16T17:46:20.603 回答
1

无论渐进式闹钟开发人员在做什么,这都不是 Robert Höglund 所描述的,AFAIK,因为即使手机处于静音状态,闹钟也会响起,而 UILocalNotification 似乎没有任何方法允许这样做。此外,如果您在警报未决时手动终止该应用程序,该应用程序将通知您它需要重新启动。这似乎表明它必须以某种方式在后台运行。

于 2010-12-17T22:09:40.183 回答