Невозможно обработать события дистанционного управления для звука backgronud - PullRequest
2 голосов
/ 27 мая 2011

В контроллере вида для моего аудиоплеера я добавил это:

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

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

Далее я добавил это в свой контроллер представления для обработки удаленных событий:

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    NSLog(@"REMOTE EVENT!");
    switch (event.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
            [streamer pause];
            break;
        case UIEventSubtypeRemoteControlPlay:
            [streamer start];
            break;
        case UIEventSubtypeRemoteControlPause:
            [streamer pause];
            break;
        case UIEventSubtypeRemoteControlStop:
            [streamer stop];
            break;
        default:
            break;
    }
}

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

У кого-нибудь есть указания относительно того, где я могу ошибаться?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 28 мая 2011

Вы реализовали неправильный метод: вместо - (void) viewWillAppear: (BOOL) анимированный, он должен быть - (void) viewDidAppear: (BOOL) анимированный.

1 голос
/ 28 мая 2011

Я столкнулся с этой проблемой раньше и обнаружил, что в моей проблеме это было потому, что мое представление было подпредставлением, а родительский объект ловил удаленные события.Я бы начал с AppDelegate и реализовал метод, чтобы увидеть, отправляется ли что-нибудь в AppDelegate, а затем проследить его оттуда.Скорее всего, существует view или viewController, который перехватывает событие и не передает его.

0 голосов
/ 15 февраля 2012

Убедитесь, что вы установили аудио сеанс?Используйте AVAudioSession и установите категорию AVAudioSessionCategoryPlayback, прежде чем стать первым респондентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...