打电话后,恢复在后台运行的应用程序

我有一个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'(尚未挂断),然后回到挂断状态,并返回到应用程序,音乐无法播放,您应该这样做:
    当应用程序从后台转到前台时,请设置AVAudioSessioncontext 。 (不要在中断结束时设置它们)

  • 链接地址: http://www.djcxy.com/p/57453.html

    上一篇: Resuming an app running in background after a phone call ios

    下一篇: ios 7 non deprecated solution to resuming background music from duck