2015-01-11 85 views
-1

所以我一直在做这方面的大量研究,我似乎无法得到这段代码来检测播放/暂停按钮是否在耳机上按下。我目前有我的代码正在听音量按钮被按到哪个输出动作到我的应用程序非常好。暂停/播放按钮监听器

我面临的问题是没有将mp3或多媒体合并到我的应用程序中,所以我几乎只需要应用程序即可检测何时按下物理播放/暂停按钮。

我查看了http://www.sagorin.org/ios-playing-audio-in-background-audio/,由于在应用程序内没有检测到多媒体,所以我没有成功。我也试图做一个第一响应者功能,没有运气。

任何想法或如果有人有类似的问题,这将不胜感激。谢谢

+1

“我也试图做第一个响应函数,没有运气。”请说明你做了什么。 – matt

回答

1

请看看Remote Control-segment of the documentation。需要满足三个标准才能通知耳机上的按钮按下:

  • 成为第一响应者。呈现多媒体内容的视图或视图控制器必须是第一响应者。
  • 打开遥控事件的传送。您的应用必须明确要求开始接收远程控制事件。
  • 开始播放音频。您的应用必须是“正在播放”应用。重申一遍,即使您的应用程序是第一响应者,并且您已启用事件传递,但您的应用程序在开始播放音频之前不会收到远程控制事件。

一旦您符合这些要求,您就可以开始编码了。从文档:

清单5-1准备接收远程控制事件

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    // Turn on remote control event delivery 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

    // Set itself as the first responder 
    [self becomeFirstResponder]; 
} 

当视图或视图控制器不再管理音频或视频, 它应该关闭的远程递送控制事件。它应该在viewWillDisappear:方法 中退出第一响应者状态,如清单5-2所示。

清单5-2结束接收遥控器的事件

- (void)viewWillDisappear:(BOOL)animated { 

    // Turn off remote control event delivery 
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents]; 

    // Resign as first responder 
    [self resignFirstResponder]; 

    [super viewWillDisappear:animated]; 
} 

处理远程控制活动

处理远程控制的事件,第一响应者必须实现 的remoteControlReceivedWithEvent:由UIResponder声明的方法。 该方法实现应评估传入的每个UIEvent对象的子类型,然后根据子类型将适当的 消息发送到呈现音频或视频内容的对象。 清单5-3将播放,暂停和停止消息发送到音频对象。 其他遥控UIEvent子类型是可能的,详情请参阅UIEvent类 参考。

清单5-3处理遥控事件

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

    if (receivedEvent.type == UIEventTypeRemoteControl) { 

     switch (receivedEvent.subtype) { 

      case UIEventSubtypeRemoteControlTogglePlayPause: 
       [self playOrStop: nil]; 
       break; 

      case UIEventSubtypeRemoteControlPreviousTrack: 
       [self previousTrack: nil]; 
       break; 

      case UIEventSubtypeRemoteControlNextTrack: 
       [self nextTrack: nil]; 
       break; 

      default: 
       break; 
     } 
    } 
}