目前我的游戏可以正确地在系统内置iPod应用程序播放音乐时停止背景音乐,但它无法检测到像Pandora这样的应用在播放音乐。
目前,在我的applicationDidBecomeActive
方法中,我检查[[MPMusicPlayerController iPodMusicPlayer] playbackState]
来确定是否正在播放音乐。如何等效地检查类似Pandora的应用在后台播放音频?
目前我的游戏可以正确地在系统内置iPod应用程序播放音乐时停止背景音乐,但它无法检测到像Pandora这样的应用在播放音乐。
目前,在我的applicationDidBecomeActive
方法中,我检查[[MPMusicPlayerController iPodMusicPlayer] playbackState]
来确定是否正在播放音乐。如何等效地检查类似Pandora的应用在后台播放音频?
AudioSessionGetProperty
(如jake_hetfield的回答所述)已于iOS 7中被弃用。
相反,尝试使用这个使用isOtherAudioPlaying的一行代码:
BOOL isOtherAudioPlaying = [[AVAudioSession sharedInstance] isOtherAudioPlaying];
适用于iOS 6及以上版本。
请查看此问题。
似乎您可以通过检查kAudioSessionProperty_OtherAudioIsPlaying属性来查看是否正在播放其他音频,方法如下:
UInt32 propertySize, audioIsAlreadyPlaying=0;
propertySize = sizeof(UInt32);
AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &audioIsAlreadyPlaying);
另外一个补充是询问用户是否想要游戏音乐或者已经播放的声音/音乐。
kAudioSessionProperty_OtherAudioIsPlaying
得到了一个虚假的正面结果。其他音频绝对没有播放(我停止了我的 iPhone 5 iOS 6.x 上的 iPod)。这种情况有时会发生。就像某些东西卡在那里一样,使 kAudioSessionProperty_OtherAudioIsPlaying
总是返回 YES/1/true/positive。通常只有重启设备后才能解决。 - JonnyiOS 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);
创建一个处理音频设置的类,比如说... "AudioManager"
轮询布尔值"isOtherAudioPlaying"......也许将其分配给你自己的布尔值。
import Foundation
import AVFoundation
class AudioManager {
static let successBingSoundID: SystemSoundID = <Your System Sound ID in Int>
static func playSystemSoundIfBackgroundSoundIsOff() {
guard !AVAudioSession.sharedInstance().isOtherAudioPlaying else {return}
AudioServicesPlaySystemSoundWithCompletion(successBingSoundID, nil)
}
}
用法:
AudioManager.playSystemSoundIfBackgroundSoundIsOff()
.isOtherAudioPlaying
的Swift版本,它提供了一些有用的信息。我修改了原始代码,以便人们可以轻松地使用它们。 - Hitit
var otherAudioPlaying = AVAudioSession.sharedInstance().otherAudioPlaying
- Callamvar otherAudioPlaying = AVAudioSession.sharedInstance().isOtherAudioPlaying
- Emil Korngold