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 闹钟的主要内容,如果未能解决你的问题,请参考以下文章

iOS:App停用后闹钟App如何播放声音?

从我的 iOS 应用程序中,如何设置铃声(默认电话)、闹钟(默认闹钟)、默认通知、联系人..? [关闭]

iOS闹钟实现

iOS 闹钟

如何在 iOS 中设置闹钟?

如何在 Flutter 中为 iOS 创建闹钟应用