我正在尝试构建自定义警报应用程序。但我面临的挑战是在应用程序处于后台时播放声音。
第一种方法, 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
除了上述两种方法都不起作用外,我似乎无法找到解决手头问题的其他方法。
我正在尝试创建一个基于位置的警报应用程序。
我可以在UILocalNotification上设置30秒的区域和自定义声音,但如果手机静音,则声音不会播放。
我可以让一个locationManager监控我的区域,但是在我收到后台通知后我无法播放声音。
我已经下载了许多能够执行此操作的应用程序,所以我知道必须有实现它的方法。然而,经过多次尝试各种角度,我似乎无法找到任何好的解决方案。如果有人有制作自定义闹钟的经验,请尽可能分享一些提示和指示。
谢谢。
答案 0 :(得分:2)
由于我的声誉不足以在任何地方发表评论,我会在此写一下作为答案。对此抱歉。
我也遇到了同样的问题。虽然我不能给你一个解决方案,但可能会有一些提示给你。对我而言,我认为可能无法实现。
我已经仔细检查了我使用的两个警报应用程序:Sleep Cycle
和UNIQLO Wake Up
。我发现这两个应用程序要求你保持它始终在前台运行,以确保闹钟工作。特别是优衣库Wake Up,它会在您保存闹钟时显示警告,告诉您按Home键可能导致闹钟无效。
有一篇文章询问了类似的问题,作者提供了一些应用程序的名称:How do I start playing audio when in silent mode locked in iOS 6。我检查了名为WaveAlarm
的应用程序。同样,如果手机处于静音模式并将其置于后台,则只有UILocalNotification可以使用。这意味着,在这种情况下不会播放声音。如果您的手机仍处于静音模式,但您将应用程序保留在前台,它将播放声音。声音的音量取决于您为视频播放设置的音量。
所以对我来说,当你将应用程序置于后台并将手机设置为静音模式时,我认为可能无法播放警报声。我想最有可能实现这一目标的方法是让用户将其保持在前台,并播放带有警报声的媒体。
我会在这两天内尝试实现这个功能。如果我有其他一些理解,我会在这里编辑这篇文章。