2013-04-24 37 views
4

在我的iPhone應用程序中,我需要啓用揚聲器並啓用藍牙。iPhone上的AudioSessionProperty

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, 
          sizeof (audioRouteOverride), &audioRouteOverride); 

    UInt32 allowBluetoothInput = 1; 

    AudioSessionSetProperty (
          kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
          sizeof (allowBluetoothInput), 
          &allowBluetoothInput 
          ); 

但它沒有在一起工作。我的意思是,如果藍牙處於開啓狀態,我會聽到藍牙耳機的聲音,如果它關閉,我聽到的聲音不是來自揚聲器。我該如何解決這個問題?

回答

2

您是否試過changeDefaultRoute而非audioRouteOverride

UInt32 doChangeDefaultRoute = 1; 
AudioSessionSetProperty(
         kAudioSessionProperty_OverrideCategoryDefaultToSpeaker 
        , sizeof(doChangeDefaultRoute) 
        , &doChangeDefaultRoute); 

這修復輸出去的揚聲器,而不是接收的問題,但我無法測試藍牙輸入端(沒有藍牙設備!)。它可能不是從我可以收集的OverrideCategoryEnableBluetoothInput實際控制輸入輸出。

蘋果這樣說:

此屬性影響kAudioSessionCategory_PlayAndRecord類別列示如下:如果音頻輸入設備從藍牙耳機來了,這個屬性設置爲在音頻輸出TRUE結果也要去藍牙耳機。 (Audio Session Services Reference

一般情況下,蘋果不希望應用程序來處理路由的方式,可能是反直覺的用戶。這個想法是,路由應該是用戶認爲他們可以控制的東西。