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

Jac*_*ang 5 core-location alarm ios uilocalnotification ios8

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

第一种方法,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];
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,

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

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

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

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

除了以上两种方法都不起作用外,我似乎找不到任何其他方法来解决手头的问题.

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

  • 我可以在UILocalNotification上设置30秒的区域和自定义声音,但如果手机静音,声音将无法播放.

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

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

谢谢.

小智 2

由于我的名气不足以到处发表评论,所以我就写在这里作为答案。为此事道歉。

我也面临着同样的问题。虽然我不能给你一个解决方案,但可能会给你一些提示。对我来说,我认为这可能是不可能实现的。

我仔细检查了我使用的两个警报应用程序:Sleep CycleUNIQLO Wake Up。我发现这两个应用程序要求你让它始终在前台运行,以确保闹钟正常工作。特别是UNIQLO Wake Up,当你保存闹钟时,它会向你显示提醒,告诉你按Home键可能会导致闹钟不工作。

有一篇帖子询问了类似的问题,作者提供了一些应用程序的名称:How do I start play audio while in Silent modelocked in iOS 6。我检查了名为 的应用程序WaveAlarm。同样,如果手机处于静音模式并且您将其置于后台,则只有 UILocalNotification 起作用。这意味着,在这种情况下不会播放任何声音。如果您的手机仍处于静音模式,但您将应用程序保持在前台,它会播放声音。声音的音量取决于您设置的视频播放音量。

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

这两天我会努力实现这个功能。如果我有其他的理解,我会在这里编辑这篇文章。