2012-04-15 6 views
0

В моем приложении у меня есть экземпляр AVAudioPlayer, который играет последовательность mp3, переход к следующему по initWithData:Воспроизведение последовательности звуковых файлов в фоновом режиме

Я хочу, чтобы пользователь мог продолжить прослушивание к игроку, даже если он выключает экран или переходит на задний план. Я знаю, что я могу использовать remotecontrolevents, чтобы переключиться на другой звук, когда пользователь захлопывает его, но могу ли я заставить его переключаться автоматически, как в iPod плеерах?

+0

ли вы имеете в виду, как только текущий трек закончится? – sooper

+0

Да, я хранил URL-адреса аудиофайлов в основных объектах данных –

ответ

4

Вам необходимо использовать протоколы AVAudioPlayerDelegate. Во-первых включить его в интерфейсе:

@interface MyAppViewController : UIViewController <AVAudioPlayerDelegate> { 
    AVAudioPlayer *yourPlayer; 
} 

@property (nonatomic, retain) AVAudioPlayer *yourPlayer; 

Затем в реализации:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
//This method is called once the file has finished playing 
//Insert code here to play the next file 
} 

Не забудьте установить delegate от yourPlayer к self в методе viewDidLoad (или где бы вы решили поставить он):

- (void)viewDidLoad { 
    [super viewDidLoad] 

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){ 
     [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
     [self becomeFirstResponder]; 
    } 

    self.yourPlayer = [[AVAudioPlayer alloc] init]; 
    self.yourPlayer.delegate = self; 
} 

Вам также необходимо изменить необходимые режимы фона в вашем info.plist в App воспроизводит звук

Не забудьте отменить события пульта дистанционного управления (viewDidUnload):

[[UIApplication sharedApplication] endReceivingRemoteControlEvents] 
+0

Вы уверены, что ** didFinishPlaying ** будет вызываться, если я нахожусь в фоновом режиме, и я могу получить доступ к управляемым объектам там? –

+0

'audioPlayerDidFinishPlaying' будет вызываться в фоновом режиме, если вы установите указанный выше режим в вашем файле .plist, а также вызовите' beginReceivingRemoteControlEvents' (обратите внимание: некоторые могут помещать инициализацию сеанса аудио и события удаленного управления в 'viewDidAppear'). Там есть нить [здесь] (http://stackoverflow.com/questions/3185621/is-it-possible-to-test-ios4-multitasking-background-music-playing-on-the-simulat/3243857#3243857) с больше информации. – sooper

+0

Прекрасно работает на симуляторе, поэтому не работайте над настоящим устройством - вы не знаете, почему это может быть так? –