我想要一个单一的视图应用程序,在那里我检测到原始iPhone耳机的中键按钮。
我试过
- (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent
{
if (theEvent.type == UIEventTypeRemoteControl) {
switch(theEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
//Insert code
case UIEventSubtypeRemoteControlPlay:
//Insert code
break;
case UIEventSubtypeRemoteControlPause:
// Insert code
break;
case UIEventSubtypeRemoteControlStop:
//Insert code.
break;
default:
return;
}
}
}
和
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
和
- (BOOL) canBecomeFirstResponder {
return YES;
}
但没有机会:(没有可捕获的事件。
有没有人有想法?
答案 0 :(得分:2)
尝试了以上所有方法,但遗憾的是现在似乎没有任何方法。
然后我窥视了beginReceivingRemoteControlEvents
并发现了
在iOS 7.1和更高版本中,使用共享的MPRemoteCommandCenter对象注册远程控制事件。使用共享的命令中心对象时,无需调用此方法。
然后检出MPRemoteCommandCenter
,最后进入MPRemoteCommand
文档页面。
好东西是这个例子:
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.addTarget(handler: { (event) in
// Begin playing the current track
self.myMusicPlayer.play()
return MPRemoteCommandHandlerStatus.success
})
现在,如果我们想阅读中间按钮,我们可以做:
MPRemoteCommandCenter.shared().togglePlayPauseCommand.addTarget { (event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
// middle button (toggle/pause) is clicked
print("event:", event.command)
return .success
}
这行得通,我设法检测到了耳机的中键。
注意: 我注意到有不同的行为,具体取决于我们在上面放置此类代码的位置。 那就是当我将其放入View Controller中时,报告的事件是相同的,而当我将其放入AppDelegate的didFinishLaunching中时,所报告的事件将有所不同。无论哪种方式都可以检测到事件。