- Home /
iOS Requirement (A10.16) Ensure that when iTunes Radio is playing, Game Music must be set to “Off” automatically
I'm getting this bug report back on my game and I have no idea how to solve it. Does anyone know how to detect when iTunes Radio starts or stops using c# or how to go about solving this issue? (To clarify, I'm not asking how to start/stop my music, but rather how do I knew when to start/stop my music).
Did you solve for this? We are hitting the same issue, any guidance you're willing to share?
Answer by JDAUL · Jun 16, 2016 at 05:38 AM
Hey there @ChimeraSW, here is a simple plugin we used to accomplish what you want:
Save it as DetectMusicPlayer.mm or something similar, and place it in your Plugins/iOS folder.
#import <MediaPlayer/MediaPlayer.h>
extern "C" {
bool _DetectMusicPlayer() {
bool playerDetectedAndPlaying = false;
NSString *reqSysVer = @"3.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending){
Class MusicPlayerController = NSClassFromString(@"MPMusicPlayerController");
if (MusicPlayerController){
id myMusicPlayerController = [[MusicPlayerController alloc]init];
id MusicPlayer = [[myMusicPlayerController class] iPodMusicPlayer ];
if ( [ MusicPlayer playbackState ] == MPMusicPlaybackStatePlaying ) {
playerDetectedAndPlaying = true;
}
}
}
return playerDetectedAndPlaying;
}
void _ResumeMusicPlayer()
{
NSString *reqSysVer = @"3.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending){
Class MusicPlayerController = NSClassFromString(@"MPMusicPlayerController");
if (MusicPlayerController){
id myMusicPlayerController = [[MusicPlayerController alloc]init];
id MusicPlayer = [[myMusicPlayerController class] iPodMusicPlayer ];
if ( [ MusicPlayer playbackState ] != MPMusicPlaybackStatePlaying ) {
[myMusicPlayerController play];
}
}
}
}
}
Then, in another script, say DetectMusicPlayer.cs, give a callback to the native plugin like so:
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class DetectMusicPlayer
{
#if UNITY_IOS
[DllImport("__Internal")]
static private extern bool _DetectMusicPlayer();
[DllImport("__Internal")]
static private extern void _ResumeMusicPlayer();
#endif
static public bool Detect()
{
#if UNITY_IOS
return _DetectMusicPlayer();
#else
return false;
#endif
}
static public void ResumePlayer()
{
#if UNITY_IOS
Debug.Log("Resuming music player");
_ResumeMusicPlayer();
#endif
}
}
//Usage example
/*
//Some global Listener class...
void OnApplicationFocus(bool isFocused)
{
bool musicPlaying = DetectMusicPlayer.Detect();
if (musicPlaying)
{
// Mute game music here...
}
else
{
//Unmute game music here...
}
}
*/
Hope this helps!
Answer by samonte.rey · May 16, 2016 at 05:16 PM
I personally did not solve it but a member in our team did. The solution was to write a native plugin that detects when iTunes radio was playing.
I don't suppose this is a plugin you guys would be willing to share? :)