我目前正在尝试实施一个类似闹钟的系统,以便在事件发生时提醒手机(在我的情况下是蓝牙事件)。即使手机处于静音和后台,我也希望发出此警报。
我创建了一个本地通知,但是如果手机处于静音模式(由于我们将手机置于静音状态,这似乎是正常的),我无法播放声音。
所以我试图自己管理声音,我正在努力在背景中播放声音。到目前为止,我在我的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");
}
即使在静音模式下,声音在前景中也很有效,但在背景中我根本没有声音。有什么想法吗?
由于
修改: 最后我使用上面的代码。唯一缺失的一点是,我试图播放声音有点似乎是一个不同的线程,当我在我的蓝牙事件中播放它而不是我的函数调用它正在工作。
答案 0 :(得分:0)
连续播放音频的应用程序(即使应用程序在后台运行)也可以通过在其Info.plist文件中包含UIBackgroundModes键(带有音频值)来注册为背景音频应用程序。包含此密钥的应用必须在后台为用户播放可听内容。
Apple reference "Playing Background Audio"
Ensuring That Audio Continues When the Screen Locks
找到here
答案 1 :(得分:0)
我不确定您的问题是您是否未正确配置音频会话输出。在我的应用程序中播放.wav时遇到了类似的问题。我只用耳机听他们。这种方法帮助了我:
- (void) configureAVAudioSession {
//get your app's audioSession singleton object
AVAudioSession *session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
//set the audioSession category.
//Needs to be Record or PlayAndRecord to use audioRouteOverride:
success = [session setCategory:AVAudioSessionCategoryPlayAndRecord
error:&error];
if (!success) NSLog(@"AVAudioSession error setting category:%@",error);
//set the audioSession override
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if (!success) NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);
//activate the audio session
success = [session setActive:YES error:&error];
if (!success) NSLog(@"AVAudioSession error activating: %@",error);
else NSLog(@"audioSession active"); }
尝试一下!
答案 2 :(得分:0)
您需要在plist文件中进行一些更改。
用于在应用输入背景时启用声音。
1)将所需的背景模式设置为App播放音频
2)设置应用程序不在后台运行到YES。
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
然后,您需要在AppDelegate中编写这么多代码
现在,您可以在手机屏幕锁定或后台轻松运行音频。
对我来说很好。 :)
有关详情,请参阅Playing Audio in background mode和Audio Session Programming Guide