remoteControlReceivedWithEvent не вызывать в одноэлементном классе - PullRequest
3 голосов
/ 25 октября 2011

В моем приложении я бы хотел, чтобы музыка воспроизводилась так же, как музыкальная библиотека 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, особенно с фоновым воспроизведением и дистанционным управлением?

Если мое предположение неверно, как заставить его (одноэлементный класс) получить удаленное событие?

Спасибо !!

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

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

Если кто-нибудь скажет мне об этом, я выберу этот ответ.

Я найду ответ в Обработка событийApple, и это четко описывает для респондента.

1 голос
/ 04 января 2012

Просто убедитесь, что он может стать первым респондентом

(BOOL)canBecomeFirstResponder {
    return YES;
}
...