如何检测单击中间耳机按钮的时间

时间:2015-06-01 13:00:32

标签: ios iphone

我想要一个单一的视图应用程序,在那里我检测到原始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;
}

但没有机会:(没有可捕获的事件。

有没有人有想法?

1 个答案:

答案 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中时,所报告的事件将有所不同。无论哪种方式都可以检测到事件。