我在 Google 和 StackOverflow 上做了很多研究。我找到的所有答案都不适用于 iOS 7。我开始使用 Xcode 5 在 iOS 7 SDK 中编写新的应用程序。
我要做的就是从存储在应用程序包中的文件(而不是音乐库)中播放应用程序中的音频。我想在屏幕锁定时在后台播放音频并进行控制(除了控制中心)。
我将APPNAME-Info.plist
键 ,设置UIBackgroundModes
为audio。它不处理应用程序委托中的事情;一切都在 ViewController 内完成
@interface ViewController : UIViewController <AVAudioPlayerDelegate>
在实现的viewDidAppear:
方法中,我调用 super ,然后调用以下代码:
// Once the view has loaded then we can register to begin receiving controls and we can become the first responder
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
在我的实现viewWillDisappear:
方法中,我有以下代码:
// End receiving events
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
我还实现了canBecomeFirstResponder
返回YES的方法。接下来,我实现了remoteControlReceivedWithEvent:
方法:
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
// If it is a remote control event handle it correctly
if (event.type == UIEventTypeRemoteControl) {
if (event.subtype == UIEventSubtypeRemoteControlPlay) {
[self playPauseAudio:self];
} else if (event.subtype == UIEventSubtypeRemoteControlPause) {
[self playPauseAudio:self];
} else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) {
[self playPauseAudio:self];
}
}
}
令我困惑的是,这个完全相同的设置在 iOS 6 上运行良好。在 iOS 7 上,它不起作用。在 iOS 6 中它曾经如此简单。在 iOS 7 SDK 中发生了根本性的变化。我错过了什么?