【问题标题】:Pause/Play button listener暂停/播放按钮监听器
【发布时间】:2015-01-11 20:04:10
【问题描述】:

因此,我一直在对此事进行大量研究,但我似乎无法获取此代码来检测何时按下耳机上的播放/暂停按钮。我目前有我的代码正在监听被按下的音量按钮,它可以很好地向我的应用程序输出一个动作。

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

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

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

【问题讨论】:

  • “我还尝试做一个第一响应者功能,但没有成功。”请展示你的所作所为。

标签: ios objective-c


【解决方案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;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2019-06-25
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多