注意:从 iOS 7.1 开始,您应该使用MPRemoteCommandCenter而不是下面的答案。
您创建各种系统提供的MPRemoteCommand子类,并将它们分配给[MPRemoteCommandCenter sharedCommandCenter]
.
我将其余部分保留以供历史参考,但不能保证以下内容适用于最近的 iOS 版本。事实上,它可能不会。
您肯定需要一个音频播放器,但不一定需要一个显式会话来控制远程控制事件。(AVAudioSession
对于任何播放音频的应用程序都是隐含的。)我花了相当多的时间玩这个来确认这一点。
我在互联网上看到了很多关于在哪里设置removeControlEventRecievedWithEvent:
方法以及响应者链的各种方法的困惑。我知道这种方法适用于 iOS 6 和 iOS 7。其他方法没有。不要浪费时间在应用程序委托(它们曾经工作的地方)或视图控制器中处理远程控制事件,这可能会在应用程序的生命周期中消失。
我做了一个演示项目来展示如何做到这一点。
以下是必须发生的事情的简要说明:
您需要创建一个UIApplication
. 当文档说UIResponder
时,这意味着UIApplication
,因为您的应用程序类是UIResponder
. 在这个子类中,您将实现remoteControlReceivedWithEvent:
andcanBecomeFirstResponder
方法。你想YES
从canBecomeFirstResponder
. 在远程控制方法中,您可能希望通知您的音频播放器发生了一些变化。
您需要告诉 iOS 使用您的自定义类来运行应用程序,而不是默认的UIApplication
. 为此,请打开 main.m 并更改:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([RCAppDel`egate class]));
看起来像这样:
return UIApplicationMain(argc, argv, NSStringFromClass([RCApplication class]), NSStringFromClass([RCAppDelegate class]));
在我的情况下RCApplication
是我的自定义类的名称。请改用您的子类的名称。不要忘记#import
适当的标题。
可选:您应该配置音频会话。这不是必需的,但如果您不这样做,如果手机静音,音频将不会播放。我在演示应用程序的委托中执行此操作,但在适当的情况下执行此操作。
玩点什么。在您这样做之前,遥控器将忽略您的应用程序。我只是拿了一个AVPlayer
,并给了它一个我希望启动的流媒体网站的 URL。如果你发现它失败了,把你自己的 URL 放在那里,随心所欲地玩。
这个例子有更多的代码来注销远程事件,但这并不是那么复杂。我只是定义并传递一些字符串常量。
我敢打赌,无声循环 MP3 文件将有助于实现您的目标。