首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIImagePickerController和应用程序后台模式

UIImagePickerController和应用程序后台模式
EN

Stack Overflow用户
提问于 2012-10-26 10:59:14
回答 2查看 712关注 0票数 1

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

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

如果我从plist中删除App plays audio项,ImagePickerController的音频会话就会停止运行,但之后我无法在从后台模式切换到应用程序时恢复播放MPMoviePlayerViewController

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-29 14:25:59

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

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

这不仅允许视频在临时暂停后恢复,还允许您保存状态,以便在应用程序从内存中移除或用户导致其退出的情况下视频可以恢复。

票数 2
EN

Stack Overflow用户

发布于 2012-10-29 22:33:25

您可以擦除背景模式,而不是使用通知来暂停/恢复您的播放器。请参见UIApplication class reference中的UIApplicationDidBecomeActiveNotificationUIApplicationWillResignActiveNotification

你可以截取一些代码,看看这是在this class中实现的。下面是该类的一些相关代码:

代码语言:javascript
运行
复制
[[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];
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13080153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档