UIImagePickerController和应用程序后台模式

时间:2012-10-26 02:59:14

标签: objective-c xcode uiimagepickercontroller mpmovieplayercontroller avaudiosession

我正在构建一个支持视频播放和录制的应用程序(不同时,它只是它提供的两个独立功能)。为了在应用进入后台并回来后播放视频,我必须在plist中向App plays audio添加Required background modes项(我正在使用MPMoviePlayerController进行播放)。

然而,这会导致我的视​​频录制出现问题(我正在使用UIImagePickerController)。基本上,即使在取消选择器后(通过取消按钮或完成拾取媒体),应用程序仍然会保持录音会话的运行。

如果我从plist中删除App plays audio项,则ImagePickerController的音频会话会停止行为不端,但是当我从后台模式切换到app时,我无法恢复MPMoviePlayerViewController的播放。

有没有办法可以自定义音频会话的处理方式,以便MPMoviePlayerControllerUIImagePickerController都可以正常工作?

2 个答案:

答案 0 :(得分:2)

是的,您可以根据需要自定义音频会话的处理方式:不要尝试设置App plays audio设置。

相反,在您的AppDelegate代码中(通常在提供的简单向导项目的AppDelegate.m中),使用applicationWillResignActive:方法提供代码,停止在MPMoviePlayerController中播放,然后如果需要,请使用applicationDidBecomeActive:在您暂停播放时恢复播放。

这不仅允许在临时暂停后恢复视频,而且还允许您保存状态,以便在应用程序从内存中删除或用户将其导入时恢复视频退出。

答案 1 :(得分:1)

您可以划分背景模式,而是使用通知暂停/恢复播放器。请参阅UIApplication class reference中的UIApplicationDidBecomeActiveNotificationUIApplicationWillResignActiveNotification

你可以抓住一些代码并在this class中看到这一点。以下是该类的一些相关代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(_didBecomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(_willResignActive:)
                                             name:UIApplicationWillResignActiveNotification
                                           object:nil];

- (void) _didBecomeActive:(NSNotification*)notification {
  if (_wasPlaying) {
    [_movieController play];
  }
}

- (void) _willResignActive:(NSNotification*)notification {
  _wasPlaying = _movieController.currentPlaybackRate != 0.0;
  if (_wasPlaying) {
    [_movieController pause];
  }
}