Я использую экземпляр AVAudioPlayer для воспроизведения аудиофайла. Приложение настроено на воспроизведение аудио в фоновом режиме, и настроен соответствующий сеанс аудио. Я также успешно получаю события дистанционного управления.
Здесь код:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@property (nonatomic) AVAudioPlayer *player;
@end
@implementation ViewController
@synthesize player;
- (BOOL)canBecomeFirstResponder { return YES; }
- (void)viewDidLoad
{
[super viewDidLoad];
// Turn on remote control event delivery
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
// Set ourselves as the first responder
[self becomeFirstResponder];
// Set the audio session
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
NSError *activationError = nil;
success = [audioSession setActive:YES error:&activationError];
// Play an mp3 with AVAudioPlayer
NSString *audioFileName = @"%@/Via_Aurora.mp3";
NSURL *audioURL = [NSURL fileURLWithPath:[NSString stringWithFormat:audioFileName, [[NSBundle mainBundle] resourcePath]]];
player = [[AVPlayer alloc] initWithURL:audioURL];
[player play];
}
- (void)viewWillDisappear:(BOOL)animated {
// Turn off remote control event delivery & Resign as first responder
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
// Don't forget to call super
[super viewWillDisappear:animated];
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlPreviousTrack:
NSLog(@"prev");
break;
case UIEventSubtypeRemoteControlNextTrack:
NSLog(@"next");
break;
case UIEventSubtypeRemoteControlPlay:
[player play];
break;
case UIEventSubtypeRemoteControlPause:
[player pause];
break;
default:
break;
}
}
}
@end
Когда я запускаю приложение, звук воспроизводится при загрузке представления. Приложение продолжает воспроизводить аудио, когда оно переходит в фоновый режим. Я могу успешно приостановить и/или воспроизвести аудио из Центра управления (доступ к которому можно получить либо из приложения, либо из экрана блокировки), но, если я получаю доступ к элементам управления блокировкой экрана и приостанавливаю плеер, музыка приостанавливается и блокируется экран блокировки исчезают. Я ожидаю, что музыка остановится, но не для того, чтобы элементы управления исчезли.
В других аудио-приложениях, которые я использую, вы можете приостановить, затем воспроизвести аудио с экрана блокировки. Я что-то упустил? Это правильный подход, чтобы сделать что-то вроде этого?