我正在开发一个应用程序,我想将音频输出重定向到手机扬声器,但我不知道如何以编程方式执行此操作。
有什么想法吗?
答案 0 :(得分:1)
您无法通过应用打开/关闭扬声器。但是,您可以感知设备的静音开关。通过这个你可以知道扬声器的当前状态。 This Question会引导您找到解决方案。
为了完整起见,让我在这里粘贴答案..
// "Ambient" makes it respect the mute switch
// Must call this once to init session
if (!gAudioSessionInited)
{
AudioSessionInterruptionListener inInterruptionListener = NULL;
OSStatus error;
if ((error = AudioSessionInitialize (NULL, NULL, inInterruptionListener, NULL)))
{
NSLog(@"*** Error *** error in AudioSessionInitialize: %d.", error);
}
else
{
gAudioSessionInited = YES;
}
}
SInt32 ambient = kAudioSessionCategory_AmbientSound;
if (AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (ambient), &ambient))
{
NSLog(@"*** Error *** could not set Session property to ambient.");
}
<强>更新强> 您需要覆盖AudioRoute才能在插入耳机时打开扬声器。请使用以下代码。
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
确保在Xcode中包含AudioToolbox库。我认为它会解决你的问题..
如果需要更多信息,请告诉我.. :)
答案 1 :(得分:0)
-(IBAction)playAUdio
{
if(ishandset)
{
AVAudioSession* session = [AVAudioSession sharedInstance];
BOOL success;
NSError* error;
success = [session setCategory:AVAudioSessionCategoryPlayAndRecord
error:&error];
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
success = [session setActive:YES error:&error];
}
else
{
UInt32 audioRouteOverride = kAudioSessionOutputRoute_Headphones;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
}
ishandset=!ishandset;
}