音乐开始播放的iOS通知

音乐开始播放的iOS通知,ios,unity3d,Ios,Unity3d,我正在开发一款由Unity制作的游戏,我正在尝试处理一种情况,即玩家的耳机内置了遥控器。玩家在玩游戏时按下遥控器上的播放按钮,背景音乐应用程序中的音乐开始播放。理想情况下,我们将捕获此事件并关闭音乐,但我似乎找不到在这种情况下触发的通知。我在AppController.mm中尝试了以下操作: - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOpti

我正在开发一款由Unity制作的游戏,我正在尝试处理一种情况,即玩家的耳机内置了遥控器。玩家在玩游戏时按下遥控器上的播放按钮,背景音乐应用程序中的音乐开始播放。理想情况下,我们将捕获此事件并关闭音乐,但我似乎找不到在这种情况下触发的通知。我在AppController.mm中尝试了以下操作:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    ...

    // music notifications
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

    [notificationCenter
     addObserver: self
     selector:    @selector (handlePlaybackStateChanged:)
     name:        MPMusicPlayerControllerNowPlayingItemDidChangeNotification
     object:      [MPMusicPlayerController iPodMusicPlayer]];

    [[MPMusicPlayerController iPodMusicPlayer] beginGeneratingPlaybackNotifications];

    return NO;
}

- (void)handlePlaybackStateChanged:(NSNotification*)notification
{
    NSLog(@"Playback State: %d", [MPMusicPlayerController iPodMusicPlayer].playbackState);
    //if([[MPMusicPlayerController iPodMusicPlayer].playbackState
}

是否有人知道在这种情况下实际触发的通知或我可以识别这种情况的方法?提前谢谢

Unity更新时,
appcontroller.mm
中的修改将丢失。更安全的方法是将所有本机代码放在文件夹Assets/Plugins/iOS,s中。了解更多信息

我制作了一个名为的小插件。只需将lib文件放在Scripts下的Assets/Plugins/iOS和IPodHandler中

要获得有关状态更改的通知,请按照自述文件中给出的说明进行操作


也许静态库有点过量。或者,您可以直接在Assets/Plugins/iOS中使用文件
iPodHandlerPlugin.mm
UnityIPodCallbackListener.m
appcontroller.mm
中的修改将在Unity更新时丢失。更安全的方法是将所有本机代码放在文件夹Assets/Plugins/iOS,s中。了解更多信息

我制作了一个名为的小插件。只需将lib文件放在Scripts下的Assets/Plugins/iOS和IPodHandler中

要获得有关状态更改的通知,请按照自述文件中给出的说明进行操作


也许静态库有点过量。或者,您可以直接在Assets/Plugins/iOS中使用文件
iPodHandlerPlugin.mm
UnityIPodCallbackListener.m

您是否尝试过颠倒命令的顺序?您可能需要首先开始生成通知,然后再添加自己作为观察者。发布的通知包括MPMusicLayerController播放BackstateDidChangeNotification、MPMusicLayerController NowPlayingItemDidChangeNotification和MPMusicLayerController olumedidChangeNotification。您是否尝试颠倒命令的顺序?您可能需要首先开始生成通知,然后再添加自己作为观察者。发布的通知包括MPMusicLayerController播放BackstateDidChangeNotification、MPMusicLayerController正在播放项目DidChangeNotification和MPMusicLayerController音量MedidChangeNotification。谢谢Kay,我来试一试。我参与了这个项目,AppController.mm文件已经进行了大量修改,但它位于Plugins文件夹中,因此我们可以保留对它所做的更改。我并不期待从Unity 4.1升级,尽管我已经读到该文件有很多更改,我们必须合并到其中。Kay,我只是看了一下代码,我正在做同样的事情,注册通知并设置选择器来处理这些通知。但是,没有调用我的通知函数。有什么想法吗?你是对的,到目前为止你的代码似乎还不错。为了缩小问题的范围,我会将代码提取到一个单独的类中(并在Plugins/iOS中保存文件),然后从某个
Awake
方法调用它?只是为了确认一下,这个代码应该可以检测到另一个应用程序是否正在播放音乐,对吗?这就是我想做的。是的,在我的情况下,它就像预期的那样工作。在99.9%的情况下,我仍然希望复制剩余的0.1%。通过耳机终止facetime通话有点问题。谢谢Kay,我会试一试的。我参与了这个项目,AppController.mm文件已经进行了大量修改,但它位于Plugins文件夹中,因此我们可以保留对它所做的更改。我并不期待从Unity 4.1升级,尽管我已经读到该文件有很多更改,我们必须合并到其中。Kay,我只是看了一下代码,我正在做同样的事情,注册通知并设置选择器来处理这些通知。但是,没有调用我的通知函数。有什么想法吗?你是对的,到目前为止你的代码似乎还不错。为了缩小问题的范围,我会将代码提取到一个单独的类中(并在Plugins/iOS中保存文件),然后从某个
Awake
方法调用它?只是为了确认一下,这个代码应该可以检测到另一个应用程序是否正在播放音乐,对吗?这就是我想做的。是的,在我的情况下,它就像预期的那样工作。在99.9%的情况下,我仍然希望复制剩余的0.1%。通过耳机终止facetime通话的问题。