В моем приложении я бы хотел, чтобы музыка воспроизводилась так же, как музыкальная библиотека iPod, которая может воспроизводить фон и удаленное управление.
Мое приложение - это: представление таблицы с несколькими элементами на главной странице, выбор музыкального элемента, который откроет представление музыки и покажет загруженные пользователем музыкальные файлы. Затем на этой странице пользователь может выбрать песню для воспроизведения.
Я создаю собственный класс Player в синглтоне, чтобы музыка все еще могла воспроизводить событие, покидая страницу просмотра музыки. Теперь моя проблема заключается в том, как реализовать пульт дистанционного управления. Я попробовал этот способ, используя Apple Guide . Это действительно работает, когда приложение находится на странице просмотра музыки, а затем переходит в фоновый режим.
Однако, если приложение находится на другой странице, а музыка воспроизводится, пульт дистанционного управления не работает и ничего не вызывается.
Мой код выглядит так:
[self.navigationController pushViewController:musicViewController animated:YES];
</code><pre></p>
<p>The MusicViewController has a singleton player, which is like:</p>
<code>
@interface FWAudioPlayer : UIViewController// I also tried to subclass of UIResponder, and it didn't work either
{
NSUInteger currectIndex;
NSMutableArray *_urlArray;
NSMutableArray *randomArray;
AVAudioPlayer *_player;
id fwDelegate;
}
@property (nonatomic, retain) NSMutableArray *urlArray;
@property (nonatomic, retain) NSMutableArray *randomArray;
@property (nonatomic, retain) AVAudioPlayer *audioPlayer;
@property (nonatomic, assign) id fwDelegate;
@property (nonatomic, assign) NSUInteger currectIndex;
@property (nonatomic, assign) BOOL shuffle;
+ (id)sharedAudioPlayerWithData:(NSData *)data error:(NSError **)error;
+ (id)sharedAudioPlayer;
@end
Когда приложение покидает страницу просмотра музыки, я это сделал
- (void)viewWillDisappear:(BOOL)animated
{
FWAudioPlayer *fwaudioPlayer = [FWAudioPlayer sharedAudioPlayer];
[fwaudioPlayer becomeFirstResponder];
}
Кстати, я уже установил в AppDelegate:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
Теперь, когда приложение покидает страницу просмотра музыки, я могу обнаружить, что [FWAudioPlayer canBecomeFirstResponder]
вызывается. Затем я нажимаю на пульт дистанционного управления, [FWAudioPlayer remoteControlReceivedWithEvent:]
никогда не вызывается.
Затем я попытался получить событие удаленного управления в AppDelegate. Если он может получить событие в AppDelegate, и я могу отправить обработку события и вызвать одноэлементный класс. Однако, похоже, он никогда не будет вызываться в AppDelegate.
Итак, я хотел бы знать, в чем здесь проблема. Я предполагаю, что синглтон-класс FWAudioPlayer
на самом деле не UIViewController
, поскольку он не находится в иерархии представлений приложения. Более того, когда приложение выходит на другие страницы, такие как главная страница, MainViewController
является первым респондентом, а FWAudioPlayer
никогда не может получить удаленное событие.
Если я прав, как я могу реализовать музыкальный проигрыватель с такой же функцией, как у iPod music, особенно с фоновым воспроизведением и дистанционным управлением?
Если мое предположение неверно, как заставить его (одноэлементный класс) получить удаленное событие?
Спасибо !!