iOS 闹钟
Posted
技术标签:
【中文标题】iOS 闹钟【英文标题】:iOS Alarm Clock 【发布时间】:2013-07-29 11:09:18 【问题描述】:我创建了一个简单的警报通知应用程序,通过它我可以实时获取警报,打开或关闭警报,并播放单音音频。但我需要播放一个以 VOID
类开头的声音。
下面是代码:
获取和启动警报通知:
- (void)viewDidLoad
[super viewDidLoad];
dateTimerPicker.date = [NSDate date];
- (void)presentMessage:(NSString *)message
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Hello!"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
- (void)scheduleLocalNotificationWithDate:(NSDate *)fireDate
UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.fireDate = fireDate;
notification.alertBody = @"Time to wake up!!";
notification.soundName = @"PhoneOld.mp3";
[self playPause];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
- (IBAction)alarmSetOn:(id)sender
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
dateFormatter.timeStyle = NSDateFormatterShortStyle;
dateFormatter.dateStyle = NSDateFormatterShortStyle;
NSString *dateTimeString = [dateFormatter stringFromDate:dateTimerPicker.date];
NSLog(@"Alarm Set: %@", dateTimeString);
[self scheduleLocalNotificationWithDate:dateTimerPicker.date];
[self presentMessage:@"Alarm ON!"];
- (IBAction)alarmSetOff:(id)sender
NSLog(@"Alarm Off");
[[UIApplication sharedApplication] cancelAllLocalNotifications];
[self presentMessage:@"Alarm OFF!"];
这是我的 VOID:
- (void)playPause
RADAppDelegate *appDelegate = (RADAppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.radiosound == 0)
[appDelegate.radiosound play];
else
[appDelegate.radiosound pause];
如果radiosound
的评分为 0,我该如何设置闹钟开始播放,例如:
notification.soundName = [self playPause];
但我知道这是NSString
。
【问题讨论】:
IMO 取消预定的通知并使用notification.soundName = radioSound;
重新安排新的通知
你有什么问题?如何在通知上播放流式声音(你不能),如何在你的应用程序中调用通知(它不会,除非用户接受警报),如何播放 any通知上的声音(Aniket 在下面回答)或其他什么?
【参考方案1】:
你不需要为预定通知分配声音名称,只需调用playPause方法并从通知中获取声音文件的名称,如下所示并将其分配给NSString
并在appDelegate 并访问它以播放该文件。
AppDelegate.h
@property (nonatomic,strong) NSString *nsStr_soundFile;
AppDelegate.m
@synthesize nsStr_soundFile;
- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification
//Give call to play sound method.
self.nsStr_soundFile=notification.soundName;
VOID *obj=[VOID alloc]init];
[obj playPause];
【讨论】:
不是声音文件,是流音频,当调用 notification.soundName 时,我会尝试使用最后的流设置开始播放。 警报通知是非常受限的事情。你不能让他们神奇地播放流媒体资源;看看文档。它可以播放应用程序主包中的声音资源或默认声音。 好的,有办法做到这一点吗?我可以重写所有功能没问题,但我需要一个例子,因为我是第一次尝试创建闹钟。【参考方案2】:您可以通过在您的应用程序 .plist 文件中将此键 UIApplicationExitsOnSuspend 设置为 YES 来选择退出 iOS 多任务处理,如 here
当应用选择退出时,它会在未运行、非活动和 活动状态,从不进入后台或挂起状态。
在预多任务兼容模式下运行的应用程序会保持 当用户在应用程序中锁定设备时运行 前景。所有应用程序所要做的就是等待闹钟时间和 执行其自定义代码。
【讨论】:
以上是关于iOS 闹钟的主要内容,如果未能解决你的问题,请参考以下文章