我正在尝试实现一个类似闹钟的系统,以便在事件发生时提醒手机(在我的情况下是蓝牙事件) . 即使手机处于静音和后台,我也希望发出此警报 .
我创建了一个本地通知,但如果手机处于静音模式,我就无法播放声音(这似乎是正常的,因为我们将手机置于静音状态) .
所以我试图自己管理声音,我正在努力在背景中播放声音 . 到目前为止,我在我的plist中实现了“App播放音频或使用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");
}
即使在静音模式下,声音在前景中也很有效,但在背景中我根本没有声音 . 有任何想法吗 ?
谢谢
EDIT :最后我使用了上面的代码 . 唯一缺失的一点是,我试图播放声音有点似乎是一个不同的线程,当我在我的蓝牙事件中播放它而不是我的函数调用它的工作 .
3 回答
一个连续播放音频的应用程序(即使应用程序在后台运行)也可以通过在其Info.plist文件中包含UIBackgroundModes键(带有音频值)来注册为背景音频应用程序 . 包含此密钥的应用必须在后台向用户播放可听内容 .
Apple reference "Playing Background Audio"
Ensuring That Audio Continues When the Screen Locks
找到here
我不确定你的问题是你没有正确配置音频会话输出 . 在我的应用程序中播放.wav时遇到了类似的问题 . 我只用耳机听他们 . 这个方法帮助我:
试试看!
您需要在plist文件中进行一些更改 .
当应用程序进入后台时启用声音 .
1)将所需背景模式设置为App播放音频
2)设置应用程序不在后台运行到YES .
然后,您需要在AppDelegate中编写这么多代码
现在,您可以在手机屏幕锁定或后台轻松运行音频 .
这对我来说可以 . :)
更多请参考Playing Audio in background mode和Audio Session Programming Guide