iOS 8自定义闹钟使用uilocalnotification并在手机静音时在后台播放声音

时间:2015-05-15 09:12:01

标签: ios ios8 core-location uilocalnotification alarm

我正在尝试构建自定义警报应用程序。但我面临的挑战是在应用程序处于后台时播放声音。

第一种方法, UILocalNotification

根据Apple编程指南,发出警报的正确方法是

- (void)scheduleAlarmForDate:(NSDate*)theDate
{
    UIApplication* app = [UIApplication sharedApplication];
    NSArray*    oldNotifications = [app scheduledLocalNotifications];

    // Clear out the old notification before scheduling a new one.
    if ([oldNotifications count] > 0)
        [app cancelAllLocalNotifications];

    // Create a new notification.
    UILocalNotification* alarm = [[UILocalNotification alloc] init];
    if (alarm)
    {
        alarm.fireDate = theDate;
        alarm.timeZone = [NSTimeZone defaultTimeZone];
        alarm.repeatInterval = 0;
        alarm.soundName = @"alarmsound.caf";
        alarm.alertBody = @"Time to wake up!";

        [app scheduleLocalNotification:alarm];
    }
}

问题是,

  • 如果用户手机处于静音状态,通知声音只会是一个不足以发出警报的小振动。

  • 理想情况下,无论电话处于静音还是正常状态,我都希望警报响起,以唤醒用户。

我能想到的第二种方式, AVAudioSession

  • 但是当区域接近或警报触发器进入时,audioSession无法在后台启动,因此任何audioPlayer.play()方法都不会做任何事情。

除了上述两种方法都不起作用外,我似乎无法找到解决手头问题的其他方法。

我正在尝试创建一个基于位置的警报应用程序。

  • 我可以在UILocalNotification上设置30秒的区域和自定义声音,但如果手机静音,则声音不会播放。

  • 我可以让一个locationManager监控我的区域,但是在我收到后台通知后我无法播放声音。

我已经下载了许多能够执行此操作的应用程序,所以我知道必须有实现它的方法。然而,经过多次尝试各种角度,我似乎无法找到任何好的解决方案。如果有人有制作自定义闹钟的经验,请尽可能分享一些提示和指示。

谢谢。

1 个答案:

答案 0 :(得分:2)

由于我的声誉不足以在任何地方发表评论,我会在此写一下作为答案。对此抱歉。

我也遇到了同样的问题。虽然我不能给你一个解决方案,但可能会有一些提示给你。对我而言,我认为可能无法实现。

我已经仔细检查了我使用的两个警报应用程序:Sleep CycleUNIQLO Wake Up。我发现这两个应用程序要求你保持它始终在前台运行,以确保闹钟工作。特别是优衣库Wake Up,它会在您保存闹钟时显示警告,告诉您按Home键可能导致闹钟无效。

有一篇文章询问了类似的问题,作者提供了一些应用程序的名称:How do I start playing audio when in silent mode locked in iOS 6。我检查了名为WaveAlarm的应用程序。同样,如果手机处于静音模式并将其置于后台,则只有UILocalNotification可以使用。这意味着,在这种情况下不会播放声音。如果您的手机仍处于静音模式,但您将应用程序保留在前台,它将播放声音。声音的音量取决于您为视频播放设置的音量。

所以对我来说,当你将应用程序置于后台并将手机设置为静音模式时,我认为可能无法播放警报声。我想最有可能实现这一目标的方法是让用户将其保持在前台,并播放带有警报声的媒体。

我会在这两天内尝试实现这个功能。如果我有其他一些理解,我会在这里编辑这篇文章。