所以我一直在做很多关于此事的研究,我似乎无法通过此代码来检测何时按下耳机上的播放/暂停按钮。我现在让我的代码听到按下的音量按钮,这对我的应用程序输出一个动作完全没问题。
我面临的问题是我的应用程序中没有包含mp3或多媒体,所以我只需要应用程序来检测按下物理播放/暂停按钮的时间。
我审核了http://www.sagorin.org/ios-playing-audio-in-background-audio/,由于在应用程序中未检测到多媒体,我未成功。我还试图做第一响应者的功能,没有运气。
任何想法或如果有人有类似的问题,我将不胜感激。感谢
答案 0 :(得分: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]; }
处理远程控制事件
要处理远程控制事件,第一个响应者必须实现 UIResponder声明的remoteControlReceivedWithEvent:方法。 方法实现应该评估每个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; } } }