iOS-无法在后台播放声音
我目前正在尝试实现一个类似alarm one的系统,以便在事件发生时(在我的例子中是蓝牙事件)向手机发出警报。我希望即使手机处于静音和后台,也能发出此警报 我创建了一个本地通知,但如果手机处于静音模式,我无法播放声音(这似乎很正常,因为我们将手机置于静音模式) 所以我试着自己管理声音,我正在努力在后台播放声音。到目前为止,我在plist中实现了“应用程序使用AirPlay播放音频或流式音频/视频”键,我正在使用这段代码iOS-无法在后台播放声音,ios,iphone,audio,avaudiosession,Ios,Iphone,Audio,Avaudiosession,我目前正在尝试实现一个类似alarm one的系统,以便在事件发生时(在我的例子中是蓝牙事件)向手机发出警报。我希望即使手机处于静音和后台,也能发出此警报 我创建了一个本地通知,但如果手机处于静音模式,我无法播放声音(这似乎很正常,因为我们将手机置于静音模式) 所以我试着自己管理声音,我正在努力在后台播放声音。到目前为止,我在plist中实现了“应用程序使用AirPlay播放音频或流式音频/视频”键,我正在使用这段代码 AVAudioSession *audioSession = [AVAudi
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");
}
声音在前景中效果很好,即使是在无声模式下,但我在背景中一点声音也没有。有什么想法吗
谢谢
编辑:
最后我用上面的代码得到了它。唯一缺少的一点是,当我在bluetooth事件中正确播放声音而不是在函数调用中播放声音时,我尝试在另一个线程中播放声音。它正在工作。一个连续播放音频的应用程序(即使该应用程序在后台运行)通过在Info.plist文件中包含UIBackgroundModes键(值为audio),可以注册为背景音频应用程序。包含此键的应用程序必须在后台向用户播放音频内容
找到我不确定您的问题是否是没有正确配置音频会话输出。在我的应用程序中玩.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"); }
试试看 您需要在plist文件中进行几个更改 用于在应用程序进入后台时启用声音 1) 将所需背景模式设置为应用程序播放音频 2) 将“应用程序不在后台运行”设置为“是”
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
然后,您需要在AppDelegate中编写这些代码
现在,您可以在手机屏幕锁定或在后台轻松运行音频
这对我来说很好。:)
有关更多信息,请参阅和您是否尝试使用
ApplicationIdentinterBackground:
方法?当应用程序进入后台执行一些长时间操作(如保存)时,会调用此方法。在我的情况下,通知可能在这之后很久才发出(但我的应用程序可能会执行一些操作,因为它是一个蓝牙事件)我是否说过“我在我的plist中使用AirPlay”键实现“应用程序播放音频或流式音频/视频”感谢您的帮助,我尝试添加overrideOutputAudioPort方法,但仍然无法工作。。。