设置iPhone以通过扬声器开始播放,但允许耳机覆盖

时间:2011-03-10 23:29:23

标签: ios

我知道这个问题以前有过一些处理,但我觉得我们可以把这个问题更好地解决了。

这是我现在的代码。 iPhone自动播放扬声器(不是耳机),但是当我插入耳机时没有任何反应。我希望它能通过扬声器播放,但如果插入耳机则会通过耳机进行播放。我们如何更改此代码以正确执行此操作?

    // ORIGINAL CODE
     UInt32 category = kAudioSessionCategory_PlayAndRecord; 
     error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
    if (error) printf("couldn't set audio category!");

 // I put this chunk in of code myself. To change the audio to go the speakers (not the earpiece).
 // I don't think this is the best way to do this.      


    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

谢谢!

1 个答案:

答案 0 :(得分:1)

我是这样做的:

 OSStatus error = AudioSessionInitialize(NULL, NULL, NULL, NULL);

if (error) printf("ERROR INITIALIZING AUDIO SESSION! %d\n", error);
else 
{
UInt32 category = kAudioSessionCategory_PlayAndRecord;  
// UInt32 category = kAudioSessionCategory_MediaPlayback;   

error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
if (error) printf("couldn't set audio category!");


// It is bugs when I unplug the headphones! 
UInt32 doChangeDefaultRoute = 1;        
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);




error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, self);
if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", error);
UInt32 inputAvailable = 0;
UInt32 size = sizeof(inputAvailable);

// we do not want to allow recording if input is not available
error = AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &size, &inputAvailable);
if (error) printf("ERROR GETTING INPUT AVAILABILITY! %d\n", error);
btn_record.enabled = (inputAvailable) ? YES : NO;

// we also need to listen to see if input availability changes
error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, propListener, self);
if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %d\n", error);

error = AudioSessionSetActive(true); 
if (error) printf("AudioSessionSetActive (true) failed");