UIApplication -beginReceivingRemoteControlEvents使音乐应用程序接管音频

时间:2014-05-24 19:39:18

标签: ios avaudiosession external-accessory remote-control

我有一个能够与用户说话并听取用户语音响应的应用。我注意到当我将手机插入汽车音响系统并使用应用程序时,当我的应用程序完成讲话时,它会收到中断通知,音乐应用程序开始播放音乐而不是允许我的应用程序继续播放。

如果手机未连接到外部设备,则不会发生这种情况,只有在语音停止且手机正在通过汽车播放时,才会插入手机。我做了一些测试,并确定在我的应用程序上调用beginReceivingRemoteControlEvents方法时会出现此行为。如果我的应用程序加载时没有注册远程控制事件,则问题不会发生,但我无法显示音频的“正在播放”信息或使用汽车控件来控制播放。

有没有人找到一种方法来监听遥控事件而不会丧失对设备音频播放的控制权?

2 个答案:

答案 0 :(得分:2)

这通常是由汽车音响而不是iOS设备引起的。检查立体声手册并将其从音频模式切换到iPod模式(或任何手动命名这些选项)。基本上,您的汽车音响正在收听跟踪结束通知,并使用它来触发“播放下一曲目”通知。这会调用MPMusicPlayer,它通常会在设备的库中按字母顺序选择第一首曲目。可能是软件有一种解决方法,但我发现最简单的方法就是改变汽车音响的设置。

答案 1 :(得分:0)

使用以下命令禁用远程控制事件(您可能必须使用playCommand替换togglePlayPauseCommand,或同时执行这两项操作):

    MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];

    [commandCenter.togglePlayPauseCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent * _Nonnull event) {
        NSLog(@"toggle button pressed");
        return MPRemoteCommandHandlerStatusSuccess;
    }];

或者,如果您更喜欢使用方法而不是块:

    [commandCenter.togglePlayPauseCommand addTarget:self action:@selector(toggleButtonAction)];

停止:

    [commandCenter.togglePlayPauseCommand removeTarget:self];

或:

    [commandCenter.togglePlayPauseCommand removeTarget:self action:@selector(toggleButtonAction)];

您需要将其添加到文件的包含区域:

@import MediaPlayer;