音频遥控器不起作用

Posted

技术标签:

【中文标题】音频遥控器不起作用【英文标题】:Remote Control for audio doesn't work 【发布时间】:2013-09-04 19:31:38 【问题描述】:

在我设法使用 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");
            
        
    

感谢您的努力。

【问题讨论】:

【参考方案1】:

您的视图控制器似乎不在响应者链中。 这可能是由于 viewWillDisappear 中的 [self resignFirstResponder] 和/或另一个 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]));

【讨论】:

以上是关于音频遥控器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

音频自动播放不起作用html5

SceneKit:位置音频不起作用

SDL 音频回叫不起作用?

html5 音频 currentTime 不起作用

为啥我的停止按钮在这个 javascript 音频播放器上不起作用?

允许使用 Swift 的背景音频不起作用