打电话后,恢复在后台运行的应用程序
我有一个ios应用程序,当它移动到后台时继续播放音乐。 现在,如果有电话回答与否,应用程序不会继续播放音乐。 两天来,我一直在这里阅读有关这个问题的帖子。没有一个解决了我的问题。
当我需要时,我也使用AVQueuePlayer对象来流式播放我的音乐。 现在委托方法自ios6以来已被弃用。 所以我使用Notications。
令人惊叹的是,通知中断端(电话通话结束),播放音乐的代码也被写入,但应用程序在播放音乐之前不会播放音乐(通过另一个通知)
这是我的代码
-(void)viewWillAppear
{.....
........
.....
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioInterruptionNotification:) name:AVAudioSessionInterruptionNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioInterruptionNotification:) name:UIApplicationDidBecomeActiveNotification object:nil]
}
-(void)audioInterruptionNotification:(NSNotification *) aNotification {
NSLog(@"Interrupt %@", aNotification);
NSDictionary *dict = [aNotification userInfo];
NSUInteger typeKey = [[dict objectForKey:@"AVAudioSessionInterruptionTypeKey"] unsignedIntegerValue]; NSLog(@"%d", typeKey);
if (typeKey == 0)
{
[avPlayer play];
NSLog(@"1.......");
}
else if (typeKey == 1)
{
[avPlayer play];
NSLog(@"3...............");
;
}
}
另外,Ive试图通过调度队列引发延迟。 委托方法似乎不起作用。 但是在电话后,苹果的gaana,saavn和官方音乐应用恢复。 所以这是可能的。 我似乎错过了某些东西。 如果我使用核心电话。我将不得不添加整个框架,这将增加应用程序的大小。 如果这是唯一的方法,请告诉我如何。
谢谢,我真的很感激你的时间。
所以我回了一段时间后,我看到我的问题仍然没有答案。 那么我已经解决了我的问题。 事实证明这只是一个简单的陈述而已。
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
以及我写在我的问题中的代码。
我已经解决了这个问题 - 应用程序被电话中断,音乐消失如何?
OSStatus result1 = AudioSessionInitialize(NULL, NULL, interruptionListener, NULL);
实现interruptionListener
:
void interruptionListener( void * inClientData, UInt32 inInterruptionState){
if (inInterruptionState == kAudioSessionBeginInterruption)
{
NSLog(@"Begin kAudioSessionBeginInterruption");
alcMakeContextCurrent(NULL); // important
}
else if (inInterruptionState == kAudioSessionEndInterruption)
{
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
NSError * err = nil;
[audioSession setCategory :AVAudioSessionCategoryPlayback error:&err]; // important
if(err){
NSLog(@"audioSession: %@ %ld %@", [err domain], (long)[err code], [[err userInfo] description]);
return;
}
err = nil;
[audioSession setActive:YES error:&err];
if(err){
NSLog(@"audioSession: %@ %ld %@", [err domain], (long)[err code], [[err userInfo] description]);
return;
}
//AudioSessionSetActive(true); //sometimes have no effect
// use alcMakeContextCurrent to set the context——with the context you stored before // important
NSLog(@"End kAudioSessionEndInterruption");
}
}
现在可以当时钟或电话中断,音乐仍然可以播放。
但是,如果您接听电话并触摸'HOME'(尚未挂断),然后回到挂断状态,并返回到应用程序,音乐无法播放,您应该这样做:
当应用程序从后台转到前台时,请设置AVAudioSession
和context
。 (不要在中断结束时设置它们)
上一篇: Resuming an app running in background after a phone call ios
下一篇: ios 7 non deprecated solution to resuming background music from duck