我正在制作一个支持多任务处理的闹钟应用程序。但是,我坚持使用sdk的一些限制。
每当警报时间到达用户设置的某些属性时,我需要播放选定的警报声。 这些属性: - 闹钟声音可以是来自用户iPod库的音乐,也可以是应用程序包中的一些声音文件。 - 可以将闹钟声音设置为渐进式播放。
此外,警报声必须在后台循环播放,直到用户取消或唤醒应用程序。
我想到的第一个合乎逻辑的事情是使用本地通知,但通过本地通知,您可以播放仅在应用程序包(不是iPod音乐)中且最多30秒的声音文件。当用户取消通知警报时,您也不会收到通知,iOS只是停止播放您的声音。
现在我正在考虑使用背景音频播放选项并播放静音直到闹钟时间,然后播放闹钟声音,同时还显示没有声音的本地通知。但我又如何知道用户是否取消了本地通知提醒并停止播放音频。但是根据Apple的文档,播放背景音频的应用程序仍然不允许播放iPod音乐(以及使用共享资源)。
我也无法理解其他一些应用程序是如何做这些功能的。例如,Night Stand HD可以在后台播放iPod音乐,名为“Progressive Alarm Clock”的应用程序可以在后台播放渐进式声音。
关于这些问题的任何想法和建议?非常感谢您的任何帮助
答案 0 :(得分:4)
我想说iOS的当前限制是不可能的。这就是说你可以通过做渐进式闹钟的开发者做渐进式闹钟来做假的渐进式闹钟。通过安排许多本地通知,一个接一个。他将警报声音分成了几十个大小,每个都有渐进的音量。这是一个非常粗略的例子,展示了如何伪造渐进式警报。
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 :(得分:1)
无论渐进式闹钟开发者在做什么,它都不是RobertHöglund所描述的,AFAIK,因为即使手机处于静音状态,闹钟也会发出声音,而且UILocalNotification似乎没有任何方法可以实现这一点。此外,如果您在闹钟待处理时手动终止应用程序,该应用程序将通知您需要重新启动。这似乎表明它必须以某种方式在后台运行。