我们如何在ios的前台处理耳机播放/暂停按钮事件

Posted

技术标签:

【中文标题】我们如何在ios的前台处理耳机播放/暂停按钮事件【英文标题】:How can we handle headphone play/pause button events in foreground in ios 【发布时间】:2013-03-03 16:55:56 【问题描述】:

我需要在前台处理耳机播放/暂停按钮事件。我如何能够使用下面的代码在后台处理相同的场景

if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)])
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    [self becomeFirstResponder];
    NSLog(@"Responds!");

如果可能,请提供解释或示例代码。我做了很多研究,但没有任何帮助。

【问题讨论】:

【参考方案1】:

还有另一种方法可以通过耳机实现播放器控制。 使用MPRemoteCommandCenter tooglePlayPauseCommand。 Apple documentation

[[MPRemoteCommandCenter sharedCommandCenter].togglePlayPauseCommand addTarget:self action:@selector(onTooglePlayPause)];

【讨论】:

【参考方案2】:

您必须检查以下条件:

    编辑您的 info.plist 以规定您在后台和前台执行音频 (UIBackgroundModes)。

    实现这个功能:

    - (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent 
    
      if (theEvent.type == UIEventTypeRemoteControl)
      
        switch(theEvent.subtype) 
        case UIEventSubtypeRemoteControlTogglePlayPause:
                //Insert code
                break;
            case UIEventSubtypeRemoteControlPlay:
                //Insert code
                break;
            case UIEventSubtypeRemoteControlPause:
                // Insert code
                break;
            case UIEventSubtypeRemoteControlStop:
                //Insert code.
                break;
            default:
                return;
        
      
    
    

...显然,将“//插入代码”替换为您的应用中相关的任何功能。

3>最后,为了调用上述函数,将其插入到 viewDidAppear 事件中:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    if ([self canBecomeFirstResponder]) 
        [self becomeFirstResponder];
    

另请参阅此链接: http://www.sagorin.org/2011/11/29/ios-playing-audio-in-background-audio/

【讨论】:

感谢您的回复,但是我能够在后台处理事件,我也在 plist 中添加了 UIBackgroundModes,但我不知道前台事件处理。我试过触发提到的方法'- (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent',但没有运气。你能解释一下我们如何在 plist 中添加前台键。 2分钟后,如果按下耳机按钮,音乐应用会启动并播放上一个声音。【参考方案3】:

slobodans 解决方案的 swift 2 版本:

MPRemoteCommandCenter.sharedCommandCenter().togglePlayPauseCommand.addTarget(self, action: #selector(togglePlayStop(_:)));

【讨论】:

以上是关于我们如何在ios的前台处理耳机播放/暂停按钮事件的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

android 耳机按钮控制音乐播放

拔下耳机时暂停ExoPlayer

如何控制我的音乐播放器耳机?

如何分配 AVPlayer 播放/暂停按钮 iOS?

如何在 iOS 中暂停后台播放器