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

标签 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 监控我的区域,但在收到后台通知后我无法播放声音。

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

谢谢。

最佳答案

由于我的声誉不足以到处发表评论,因此我将其写在这里作为答案。对此感到抱歉。

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

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

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

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

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

关于iOS 8自定义闹钟使用uilocalnotification并在手机静音时在后台播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30255682/

相关文章:

ios - 无法在SDK 3.2中保存Facebook accessToken

ios - 使用 itms-services URL 的 iOS8 应用程序无线 (OTA) 安装失败

uitableview - 如何快速获取所选行的textLabel?

ios - 核心位置 plist 不工作(Xcode 9.4/iOS 11.4)

ios - 我的应用程序进入暂停状态的原因是什么?

ios - UIImageView显示在错误的UITableViewCell中

ios - 如何为 pageControl.currentPage 创建枚举?

ios - 从本地通知打开应用程序后动画标签 [Swift 3.0 - Xcode 8]

Swift UIUserInterfaceIdiom 错误

ios - 在iOS中获取iBeacon的地理位置经度和纬度