cocos2d-x 3.x BGM handling with iTunes music play
from: http://qiita.com/noir/items/83e8ad09cebb57a32224
Basic approach is to set AudioSession category to AVAudioSessionCategoryAmbient and check otherAudioPlaying property.
- Write a bridge class between Objective-C and C++: e.g. GameUtil.h, GameUtil.mm
 - Create following methods in GameUtil class
- setCategoryAmbient method to set Ambient category
 - isOtherAudioPlaying method to get otherAudioPlaying property
 
 - in the method of didFinishLaunching in AppDelegate.cpp, call setCategoryAmbient() method
 - In each scene’s foreground delegate, if isOtherAudioPlaying() is true, manage BGM not to be played
 
GameUtil.h
class GameUtil
{
  public:
    static bool setCategoryAmbient();
    static bool isOtherAudioPlaying();
}
GameUtil.mm
#import <AVFoundation/AVFoundation.h>
bool GameUtil::setCategoryAmbient()
{
  NSError* error= nil;
  AVAudioSession* audioSession= [AVAudioSession sharedInstance];
  [audioSession setCategory:AVAudioSessionCategoryAmbient error:&error];
  if (error) return false;
  else return true;
}
bool GameUtil::isOtherAudioPlaying()
{
  AVAudioSession* audioSession= [AVAudioSession sharedInstance];
  return [audioSession isOtherAudioPlaying];
}