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);