AVPlayer播放来自iOS 7后台通知的音频

时间:2014-01-07 00:47:12

标签: ios iphone audio background

我在audio设置了fetchremote-notificationUIBackgroundModes,我通过以下方式成功接收了我的应用在后台(非活动)的远程通知:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

我在我的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

中有以下内容:
self.audioPlayer = [[AVPlayer alloc] init];

NSError *sessionError = nil;
NSError *activationError = nil;
[[AVAudioSession sharedInstance] setActive:YES error:&activationError];
if (![[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&sessionError]) {
    NSLog(@"[AppDelegate] Failed to setup audio session: %@", sessionError);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler我有以下内容:

            NSLog(@"Playing url: %@", filePath);

            AVPlayerItem * currentItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:filePath]];

            [self.audioPlayer replaceCurrentItemWithPlayerItem:currentItem];
            [self.audioPlayer play];

我看到这段代码是通过NSLog执行的,但没有声音产生。实际上,如果应用程序在进入后台的几秒钟内收到通知,则会播放音频,或者说。它第一次获得通知音频播放,但从那以后就不会播放。

iOS 7中的应用程序可以从后台开始异步启动音频输出,即。在它睡着之后一段时间没有产生任何音频?

1 个答案:

答案 0 :(得分:0)

您无法在后台发起音频。 audio后台模式允许您执行的唯一操作是在应用程序从前台移动到后台时继续生成声音。

这是一个完全合理的规则。如果任何碰巧在后台运行的应用程序可能会突然开始在设备上随时产生声音,对用户的神秘感和烦恼感到非常可怕!

但是,如果您的应用程序能够接收远程事件,并且它已经产生声音以使其成为远程事件目标,那么,使用audio后台模式,它可以继续作为远程事件目标只要在此期间没有其他应用成为远程事件目标,就可以在后台产生声音。

在后台制作声音的最可靠方法是将声音附加到本地通知中。