iOS打開揚(yáng)聲器注意事項(xiàng)

打開揚(yáng)聲器:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

關(guān)閉揚(yáng)聲器:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];

注意:

1:iPad不需要打開關(guān)閉揚(yáng)聲器:因?yàn)閕Pad只有揚(yáng)聲器

2:在打開和關(guān)閉養(yǎng)生起的時(shí)候,需要對(duì)耳機(jī)做處理,如果當(dāng)前處于耳機(jī)插入的時(shí)候,打開揚(yáng)聲器是沒(méi)有作用的。所以需要監(jiān)聽當(dāng)前音頻軌道變化。
//添加耳機(jī)拔掉偵聽事件

AudioSessionInitialize(NULL, NULL, NULL, NULL);

       AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,        audioRouteChangeCallback, (__bridge void *)(self));

//耳機(jī)拔掉偵聽事件回調(diào) [AudioManager 為當(dāng)前類,即為self]

 void audioRouteChangeCallback(void*inClientData,AudioSessionPropertyIDinID, UInt32inDataSize,constvoid*inData)
{
    CFDictionaryRefrouteChangeDictionary = inData;
    CFNumberRefrouteChangeReasonRef =CFDictionaryGetValue(routeChangeDictionary,CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
    SInt32routeChangeReason;
CFNumberGetValue(routeChangeReasonRef,kCFNumberSInt32Type, &routeChangeReason);
    AudioManager*_self = (__bridgeAudioManager*)inClientData;
    if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) {    //拔掉耳機(jī)
        [_self setSpeakerOn];
    }else if (routeChangeReason ==kAudioSessionRouteChangeReason_NewDeviceAvailable) {    //插入耳機(jī)
    }
}

//檢測(cè)當(dāng)前是否有耳機(jī):

- (BOOL)hasHeadset
{
    CFStringRef route;
    UInt32propertySize =sizeof(CFStringRef);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &route);
    if((route ==NULL) || (CFStringGetLength(route) ==0))
    {
        // Silent Mode
    }
    else
    {
        NSString* routeStr = (__bridge_transferNSString*)route;
        NSRangeheadphoneRange = [routeStrrangeOfString:@"Headphone"];
        NSRangeheadsetRange = [routeStrrangeOfString:@"Headset"];
        if(headphoneRange.location!=NSNotFound)
        {
            returnYES;
        }elseif(headsetRange.location!=NSNotFound)
        {
            returnYES;
        }
    }
    return NO;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容