似乎公认的做法是将 AV 类别设置为 AVAudioSessionCategoryPlayAndRecord,然后设置属性 kAudioSessionOverrideAudioRoute_Speaker。我正在使用类别 AVAudioSessionCategoryPlayback,因为它在未插入耳机的情况下为我提供了适当的音量。当我将类别设置为 AVAudioSessionCategoryPlayAndRecord 时,通过未插入耳机的扬声器播放的音频非常柔和。我无法通过插入任何 AV 类别的耳机通过扬声器获得所需的播放行为。
这是我的类别设置为 AVAudioSessionCategoryPlayback 的代码:
AVAudioSession* session = [AVAudioSession sharedInstance];
NSError* error = nil;
BOOL success = [session setActive: YES error: &error];
if (success)
success = [session setCategory: AVAudioSessionCategoryPlayback error: &error];
// To allow ipod music to play
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (doSetProperty), &doSetProperty);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, hardwareRoutePropertyListener, nil);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
sizeof (audioRouteOverride),
&audioRouteOverride
);