我在AppDelegate中有这个(didFinishLaunching):
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
我尝试在相关视图控制器中处理事件,但这很不稳定(一些视图控制器会获取事件,而其他视图控制器则不会,即使它们是第一响应者)。我尝试了子类化UIApplication。那没用。现在我正在尝试子类化UIWindow并执行此操作(请参阅注释):
- (void)sendEvent:(UIEvent *)event {
if (event.type == UIEventTypeRemoteControl) {
NSLog(@"I wish this happened"); //this never happens
}
else
{
NSLog(@"some other event"); //this does happen on any other interaction
[super sendEvent:event];
}
}
- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
NSLog(@"got remote event"); // this never happens either
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
{
NSLog(@"handle play/pause");
break;
}
default:
break;
}
}
}
我在信息plist中试过和不使用这个:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
没有区别。正如Apple文档所述,您可以使用音频控件模拟远程控制事件(双击主页按钮并在底部滚动到它们)。当我按下播放或暂停时,它只播放我的iTunes资料库中的音频。我也尝试过Apple耳机上的按钮。什么都没有。
我想要做的就是检测遥控器上的播放/暂停按钮,然后处理事件。我还需要做些什么来捕捉这些事件?
答案 0 :(得分:9)
所以在我的情况下,在尝试捕获远程控制事件之前,我必须首先播放一个虚拟静音音频文件。希望这可以帮助有人下线。
(更新)请注意,updated documentation现在声明如下:
要接收远程控制事件,您的应用必须执行以下三项操作:
- 成为第一响应者。呈现多媒体内容的视图或视图控制器必须是第一响应者。
- 启用远程控制事件的传送。您的应用必须明确请求开始接收远程控制事件。
- 开始播放音频。您的应用必须是“正在播放”应用。重申,即使您的应用程序是第一响应者并且您已经转向 在事件传递上,您的应用程序不会收到远程控制事件 直到它开始播放音频。