2013-09-04 5 views
0

после того, как мне удалось воспроизвести аудио в фоновом режиме с помощью MPMoviePlayerController и попытался заставить его получать удаленные элементы управления. Но когда я нажимаю кнопку «Воспроизведение/Пауза», реакции нет, и звук продолжает играть. Затем я попытался показать, есть ли выход журнала, но нет выхода.Пульт дистанционного управления для аудио не работает

Вот мой код:

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

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

    - (void)remoteControlReceivedWithEvent:(UIEvent *)event { 
     NSLog(@"remoteControlReceivedWithEvent: %@", event); 
     if (event.type==UIEventTypeRemoteControl) { 
      if (event.subtype==UIEventSubtypeRemoteControlPlay) { 
       NSLog(@"Play"); 
      } else if (event.subtype==UIEventSubtypeRemoteControlPause) { 
       NSLog(@"Pause"); 
      } else if (event.subtype==UIEventSubtypeRemoteControlTogglePlayPause) { 
       NSLog(@"Play Pause"); 
      } 
     } 
    } 

Спасибо за ваши усилия в продвинутом.

ответ

0

Похоже, что ваш контроллер просмотра не находится в цепочке ответчиков.
Возможно, из-за [self resignFirstResponder] в viewWillDisappear и/или другого ViewController находится спереди.

Чтобы получать эти события, вы можете реализовать подкласс UIApplication, который сможет принимать события всегда. Поэтому не имеет значения, какой вид ViewController виден. UIApplication всегда находится в конце цепи ответчиков.

Создать подкласс для UIApplication (MyUIApplication) и реализует следующие методы UIResponder:

- (void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { 
    ... 
} 

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

В main.m используют следующие инициировать приложение (заменить MyUIApplication и AppDelegate с именами классов):

@autoreleasepool { 
     return UIApplicationMain(argc, argv, NSStringFromClass([MyUIApplication class]), NSStringFromClass([AppDelegate class])); 
}