【发布时间】:2014-03-05 09:21:32
【问题描述】:
我目前正在尝试实现一个像警报系统这样的系统,以便在发生事件时提醒手机(在我的例子中是蓝牙事件)。即使手机处于静音和后台,我也希望出现此警报。
我创建了一个本地通知,但如果手机处于静音模式,我无法播放声音(这似乎很正常,因为我们将手机设为静音)。
所以我尝试自己管理声音,但在后台播放声音时遇到了困难。到目前为止,我在我的 plist 中实现了“应用程序播放音频或使用 AirPlay 流式传输音频/视频”键,并且我正在使用此代码。
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error = nil;
BOOL result = [audioSession setActive:YES error:&error];
if ( ! result && error) {
NSLog(@"Error For AudioSession Activation: %@", error);
}
error = nil;
result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
if ( ! result && error) {
NSLog(@"Error For AudioSession Category: %@", error);
}
if (player == nil) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"bell" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *err = nil;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
if(err)
{
NSLog(@"Error Player == %@", err);
}
else {
NSLog(@"Play ready");
}
}
[player prepareToPlay];
[player setVolume:1.0];
if([player play])
{
NSLog(@"YAY sound");
}
else {
NSLog(@"Error sound");
}
即使在静音模式下,前台的声音也很好,但我在后台根本没有声音。有什么想法吗?
谢谢
编辑: 最后我得到了它与上面的代码一起工作。唯一缺少的一点是,当我在蓝牙事件中正确播放声音而不是我的函数调用它正在工作时,我试图在某种程度上播放声音似乎是不同的线程。
【问题讨论】:
-
你试过使用
applicationDidEnterBackground:方法吗? -
当应用程序进入后台执行一些长时间的操作(如保存)时调用此方法。在我的情况下,通知可能会在此之后很长时间(但我的应用程序可以执行一些操作,因为它是一个蓝牙事件)
标签: ios iphone audio avaudiosession