IOS: Как определить, играет ли музыка в любом приложении фоновой музыки?

В настоящее время у меня есть правильная обработка игры с отключением собственного BGM при воспроизведении музыки во встроенном iPod-приложении, но она не обнаруживает, когда приложение, такое как Pandora, играет музыку.

В настоящее время в моем методе applicationDidBecomeActive я проверяю [[MPMusicPlayerController iPodMusicPlayer] playbackState], чтобы определить, играет ли музыка. Что эквивалентно этому, чтобы проверить, воспроизводит ли приложение, как Pandora, звук в фоновом режиме?

Ответы

Ответ 1

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

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

BOOL isOtherAudioPlaying = [[AVAudioSession sharedInstance] isOtherAudioPlaying];

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

Ответ 2

Отметьте этот вопрос

Кажется, вы можете увидеть, воспроизводится ли другой звук, проверяя свойство kAudioSessionSizeSphere_OtherAudioIsPlaying следующим образом:

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

Дополнение к этому может заключаться в том, чтобы спросить пользователя, хочет ли он/она иметь игру или уже воспроизводимый звук/музыку.

Ответ 3

Как и в iOS 8, необходимо использовать свойство secondaryAudioShouldBeSilencedHint:

/* Will be true when another application with a non-mixable audio session is playing audio.  Applications may use
this property as a hint to silence audio that is secondary to the functionality of the application. For example, a game app
using AVAudioSessionCategoryAmbient may use this property to decide to mute its soundtrack while leaving its sound effects unmuted.
Note: This property is closely related to AVAudioSessionSilenceSecondaryAudioHintNotification.
*/
@property(readonly) BOOL secondaryAudioShouldBeSilencedHint  NS_AVAILABLE_IOS(8_0);