Как определить, воспроизводят ли другие приложения фоновый звук?

Я делаю игру для iphone / ipad и не хочу, чтобы моя фоновая музыка мешала музыке, которую пользователь, возможно, уже играет.

Я знаю, что могу получить состояние приложения iPod с помощью MPPlayerController, но как мое приложение узнает, воспроизводит ли что-то еще, например Pandora, фоновый звук на iOS4?


person gotung    schedule 30.06.2010    source источник


Ответы (2)


Я наконец понял это. Я видел множество примеров, но так и не смог заставить их работать.

Большинство примеров не указывают на это для чего-то вроде:

    UInt32   propertySize, audioIsAlreadyPlaying;

propertySize = sizeof(UInt32);
AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &audioIsAlreadyPlaying);

Для работы подходящим фреймворком для добавления в ваше приложение является AudioToolbox. Я продолжал пытаться добавить другие аудио-фреймворки и всегда пропускал этот.

После того, как вы добавите этот фрейм (и импортируете его в соответствующий файл кода), просто проверьте, равно ли audioIsAlreadyPlaying нулю или единице.

person gotung    schedule 30.06.2010
comment
Обратите внимание, что перед выполнением этого вызова вам необходимо инициализировать аудиосеанс, иначе вы можете получить ложноотрицательный результат. Это обычная проблема (или, по крайней мере, я видел много людей на форумах или в беседах, у которых была эта проблема) - person Laughing_Jack; 22.10.2010
comment
Добавить [AVAudioSession sharedInstance]; На вершине - person Baryon Lee; 07.04.2013
comment
AudioSessionGetProperty устарел в iOS 7. Есть ли другие альтернативы? - person ZeMoon; 27.01.2014

AudioSessionGetProperty (как указано в ответе gotung) устарел с iOS 7.

Вместо этого попробуйте этот однострочник, в котором используется isOtherAudioPlaying:

BOOL isOtherAudioPlaying = [[AVAudioSession sharedInstance] isOtherAudioPlaying];

Работает на iOS 6+.

person Jon Schneider    schedule 27.10.2015