如何像闹钟专业应用程序一样播放超过30秒的闹钟声?

时间:2011-07-01 04:55:09

标签: iphone objective-c ios

我正在尝试构建类似于当前在应用商店中的闹钟专业版和床头柜应用程序的闹钟。当闹钟时间被击中时(通常是第二天早晨),这些应用程序中的每一个都能够播放超过30秒的闹钟声音。

我已经尝试过两种没有运气的方法:

方法1:

[self performSelector:@selector(playAlarm) withObject:nil afterDelay:myDouble];

方法2:

            UILocalNotification *notif = [[cls alloc] init];
    notif.fireDate =[datePicker date];//firedate;
    notif.timeZone = [NSTimeZone systemTimeZone];

    notif.alertBody = @"Time to wake up!";
    NSString *SoundFileName=nil;
    if([[[NSUserDefaults standardUserDefaults] objectForKey:@"ActualSoundFile"] isKindOfClass:[NSString class]])
        SoundFileName=[[[NSString alloc]initWithString:[[NSUserDefaults standardUserDefaults]objectForKey:@"ActualSoundFile"]]autorelease];
    else 
        SoundFileName=[[[NSString alloc] initWithString:@""] autorelease];

    if([SoundFileName length]>1)
        notif.soundName = [SoundFileName stringByAppendingString:@".wav"];
    else 
        notif.soundName = UILocalNotificationDefaultSoundName;

    notif.alertAction=@"Snooze";
    notif.repeatCalendar=[NSCalendar currentCalendar];
    notif.repeatInterval =NSDayCalendarUnit;

    NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"Alarm" forKey:kRemindMeNotificationDataKey];

            notif.userInfo = userDict;

    [[UIApplication sharedApplication] scheduleLocalNotification:notif];
    [notif release];

有谁知道他们如何在7小时后在循环中播放闹钟?

3 个答案:

答案 0 :(得分:6)

所选答案不是正确答案,因为用户可能会在第一次通知期间醒来并选择关闭它。猜猜是什么,第二个通知给用户留下了警报被打破的印象。

根据App文档的正确答案如下:

当您的应用处于后台时(例如,用户在进入睡眠状态前关闭应用),当您的通知到达时,您无法播放超过30秒的声音。

要播放更长的声音,您必须告诉用户在进入睡眠状态之前将闹钟应用程序留在前台,然后在didReceiveLocalNotification中手动播放更长的声音。

答案 1 :(得分:1)

您需要通过将日期分配到fireDate属性并将声音文件分配到

来触发本地通知
UILocalNotification *localNotif = [[[UILocalNotification alloc] init]autorelease];
localNotif.fireDate = scheduleDate;
NSLog(@"fireDate is %@",localNotif.fireDate);
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = @"WAKE UP...!!!";
localNotif.alertAction = @"View";
localNotif.soundName = @"Default.wav";


[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];

这样,即使应用程序关闭,也会触发本地通知,请记住“Default.wav”文件应该小于或等于30秒,甚至闹钟专业应用程序在本地通知中播放声音= 30秒。 / p>

如果应用程序处于活动状态,您可以实现appdelegate的委托方法,并且可以应用您的逻辑来显示警报视图并播放声音甚至> 30秒......

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
}

答案 2 :(得分:-2)

所以我认为我找到了一个有效的解决方案:

要模拟播放超过30秒的闹钟声音,只需一个接一个地添加多个本地通知,相隔30秒。