当应用程序进入后台时开始播放音频文件

Posted

技术标签:

【中文标题】当应用程序进入后台时开始播放音频文件【英文标题】:Start playing an audio file when application goes in background 【发布时间】:2013-04-25 10:22:25 【问题描述】:

就像“谷歌地图”在后台导航。

我已经在“必需的背景模式”中添加了“应用程序播放音频”,但它不起作用。 它有什么问题?

这里是示例源代码:

-(void)applicationDidEnterBackground:(UIApplication *)application

UIDevice* device = [UIDevice currentDevice];

BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

    backgroundSupported = device.multitaskingSupported;

if (backgroundSupported && _bgTask==UIBackgroundTaskInvalid )

    UIApplication*    app = [UIApplication sharedApplication];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

        while (app.applicationState==UIApplicationStateBackground && _bgTask!=UIBackgroundTaskInvalid)
        
            [NSThread sleepForTimeInterval:3];
            [self playAudio];
        

        [app endBackgroundTask:_bgTask];
        _bgTask = UIBackgroundTaskInvalid;
    );



-(void)playAudio 
        [[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
        [[AVAudioSession sharedInstance] setActive: YES error: nil];  

NSURL *audioFileLocationURL = [[NSBundle mainBundle] URLForResource:@"sound" withExtension:@"caf"];
NSError *error;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileLocationURL error:&error];
[self.audioPlayer setNumberOfLoops:-1];
self.audioPlayer.delegate = self;
 [self.audioPlayer prepareToPlay];
[self.audioPlayer play];


音频文件的url可能来自网络,会在队列中播放多个音频文件。

【问题讨论】:

你可以尝试删除行 [self.audioPlayer prepareToPlay];再试一次?如果您尝试过调试以及是否调用了 playAudio 方法,请告诉我们... 删除[self.audioPlayer prepareToPlay]后还是不行;为什么要删除它? 【参考方案1】:

来自Apple's doc on the subject:

因为您开始时可能会执行任何后台任务 applicationDidEnterBackground: 在该方法之后才会运行 退出,您应该在之前请求额外的后台执行时间 开始这些任务。换句话说,首先调用 beginBackgroundTaskWithExpirationHandler: 然后在一个任务上运行 调度队列或辅助线程。

根据我自己播放背景音频的经验,如果您不要求额外的时间,则需要事先进行设置,以便 [self.audioPlayer play] 实际上是 applicationDidEnterBackground 中的第一行代码,否则系统会暂停应用在音频有机会启动并保持清醒之前。

【讨论】:

以上是关于当应用程序进入后台时开始播放音频文件的主要内容,如果未能解决你的问题,请参考以下文章

应用程序进入后台时播放音频

如何在 iOS 4 中在后台播放多个音频文件?

iphone - 在后台播放音频流

在后台播放一系列音频文件

MPMoviePlayerController 在后台播放音频流

mpmovieplayercontroller:在后台播放