[英]AVAudioPlayer Loses “Playing” Status
我有一个AVAudioPlayer,需要在后台继续。
在plist中将音频设置为背景模式,并在启动时运行:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[[RootController shared].view becomeFirstResponder];
AVAudioSession* session = [AVAudioSession sharedInstance];
[session setDelegate: self];
[session setActive:YES error:nil];
[session setCategory: AVAudioSessionCategoryPlayback error:nil];
- (BOOL)canBecomeFirstResponder { return YES; }
有时,AVAudioPlayer会处于这种奇怪的状态,其中:
setCurrentTime
,则播放图标显示并保持 我已经沉迷了大约20个小时,并且喜欢任何想法。
如果您正在播放 AVAudioPlayer
则创建一个AVPlayer
,播放图标将消失。 显然, AVPlayer
立即优先,因为它尚未播放,但播放图标从状态栏中消失了。
这会导致一些严重的问题:
首先,如果您不必使用AVPlayer
,那么就不用。 我之所以使用它,是因为我需要播放远程MP3而不先下载它。 我曾经使用过这个AudioStreamer类,但因为在流断开时弹出一个警报以及其他一些我无法修复的错误,所以放弃了。
因此,如果您坚持使用AVPlayer,只有一种方法可以将AVAudioPlayer
播放状态重新连接。 如果您在AVAudioPlayer
上调用setCurrentTime
,它将神奇地将其自身重新关联为该应用程序的当前播放器 。 因此,您需要在初始化任何AVPlayer
之后以及在AVAudioPlayer
上恢复播放的任何时间调用它。
我决定继承AVAudioPlayer的子类,以便可以将其注册在全局列表中(初始化时),而在释放时取消注册。 我还覆盖了play方法,以便任何恢复播放的调用也将调用setCurrentTime。 然后,我将AVPlayer子类化,以便在初始化任何时候,所有活动的AVAudioPlayers都自行调用setCurrentTime。 最后一件事-您必须在短暂的延迟(可能是1秒)后调用setCurrentTime
,否则它将无效。
别开玩笑了,这是近40小时的故障排除结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.