iphone iOS5 audioPlayerDidFinishPlaying не называется блокировкой экрана? - PullRequest
1 голос
/ 07 ноября 2011

У меня есть серия аудиофайлов, которые я хочу воспроизвести по очереди.Я настраиваю метод делегата audioPlayerDidFinishPlaying, чтобы запустить следующий файл в последовательности.Это работает без проблем, если я отключаю блокировку экрана или запускаю ее на эмуляторе или на устройстве iOS4.Однако, когда я запускаю его на отключенном устройстве iOS5, экран заблокирован, он останавливается после первой дорожки.Есть ли какой-нибудь способ запустить новую звуковую дорожку после включения блокировки экрана?

Вот мой основной код

// Registers this class as the delegate of the audio session.
[[AVAudioSession sharedInstance] setDelegate: self];

// Use this code instead to allow the app sound to continue to play when the screen is locked.
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

UInt32 doSetProperty = 0;
AudioSessionSetProperty ( kAudioSessionProperty_OverrideCategoryMixWithOthers,
                         sizeof (doSetProperty),
                         &doSetProperty
                         );

// Registers the audio route change listener callback function
AudioSessionAddPropertyListener (
                                 kAudioSessionProperty_AudioRouteChange,
                                 audioRouteChangeListenerCallback,
                                 self
                                 );

// Activates the audio session.

NSError *activationError = nil;
[[AVAudioSession sharedInstance] setActive: YES error: &activationError];

    NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"m4a"];  
    float vol = [appSoundPlayer volume];

    AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];  
    self.appSoundPlayer = newAudio; // automatically retain audio and dealloc old file if new file is loaded

    [newAudio release]; // release the audio safely

    appSoundPlayer.delegate = self; 
    [appSoundPlayer prepareToPlay];
    [appSoundPlayer setNumberOfLoops:0];
    [appSoundPlayer play];
    [appSoundPlayer setVolume:vol];
    [progTime setProgress:0];
}


   - (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) lappSoundPlayer successfully: (BOOL) flag {
    //... code here to select nex sound track
                    [lappSoundPlayer play];
    }

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

Примечание: я убедился, что это работает в iOS4.

1 Ответ

2 голосов
/ 15 ноября 2011

Вы установили категорию аудио-сеанса, в частности AVAudioSessionCategoryPlayback, как описано здесь ?

[[AVAudioSession sharedInstance] setDelegate: self];    
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];

Если это не сработает, по словам пользователя ascanio в этом сообщении на форумах разработчиков Apple, еще одна попытка - настроить приложение на прослушивание событий удаленного управления:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
...