remoteControlReceivedWithEvent в AVAudio не вызывается - PullRequest
3 голосов
/ 27 июля 2011

Я работаю над приложением, воспроизводящим аудио в фоновом режиме.Я написал код для элементов управления iPod, как указано в документации к приложению.Я реализовал это как

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {    
    if (receivedEvent.type == UIEventTypeRemoteControl) {

        switch (receivedEvent.subtype) {

            case UIEventSubtypeRemoteControlTogglePlayPause:
                [self playButtonPressed:playButton];
                [self testing];
                break;

            case UIEventSubtypeRemoteControlPreviousTrack:
                [self rewButtonReleased:(UIButton *)rewButton];
                break;

            case UIEventSubtypeRemoteControlNextTrack:
                [self ffwButtonReleased:(UIButton *)ffwButton];
                break;

            default:
                break;
        }
    }
}
- (BOOL)canBecomeFirstResponder {
    NSLog(@"canBecomeFirstResponder");
    return YES;
}

и

- (void) viewDidAppear:(BOOL)animated 
{
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        [self becomeFirstResponder];
    }
}

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

Пожалуйста, предложите мне, что еще мне нужно или где я совершаю какие-либо ошибки.Привет!

Ответы [ 5 ]

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

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

- (BOOL)canBecomeFirstResponder {
     return YES;
}
5 голосов
/ 20 января 2012

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

Моя проблема заключалась в том, что я включил переопределение микширования в попытке заставить работать фоновый звук:

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

Я удалил эти строки (оказывается, они не нужны для фонового звука), и remoteControlReceivedWithEvent начал работать. Это имеет смысл. Если вы укажете, что ваше приложение должно иметь возможность смешивать звук с тем, что в данный момент воспроизводится в каком-либо другом приложении (например, смешивать звуковые эффекты вашего приложения с музыкой приложения iPod), из этого следует, что другое приложение должно сохранять приоритет нажатий кнопок на пульте .

1 голос
/ 27 июля 2011

Вы добавили аудио ключ UIBackgroundModes в список info.plist?См. документы .

0 голосов
/ 10 ноября 2016

В Swift 3 просто убедитесь, что:

override var canBecomeFirstResponder: Bool {

    get {

        return true
    }
}
0 голосов
/ 12 августа 2011

В дополнение к добавлению звуковой клавиши UIBackgroundModes к info.plist вашего приложения я добавил:

-(void)viewDidLoad
{
    UIDevice* device = [UIDevice currentDevice];

    BOOL backgroundSupported = NO;

    if ([device respondsToSelector:@selector(isMultitaskingSupported)])
    {
        backgroundSupported = device.multitaskingSupported;
    }

... ваш код ...

...