暂停/播放按钮监听器

时间:2015-01-11 20:04:10

标签: ios objective-c

所以我一直在做很多关于此事的研究,我似乎无法通过此代码来检测何时按下耳机上的播放/暂停按钮。我现在让我的代码听到按下的音量按钮,这对我的应用程序输出一个动作完全没问题。

我面临的问题是我的应用程序中没有包含mp3或多媒体,所以我只需要应用程序来检测按下物理播放/暂停按钮的时间。

我审核了http://www.sagorin.org/ios-playing-audio-in-background-audio/,由于在应用程序中未检测到多媒体,我未成功。我还试图做第一响应者的功能,没有运气。

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

1 个答案:

答案 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;
        }
    }
}