4

在我的 iPhone 应用程序中,我需要启用扬声器并启用蓝牙。

[[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
                             );

但它不能一起工作。我的意思是,如果蓝牙打开,我会听到来自 BT 耳机的声音,如果关闭,我会听到来自扬声器的声音。我该如何解决这个问题?

4

1 回答 1

2

您是否尝试过changeDefaultRoute代替audioRouteOverride扬声器?

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

这修复了输出到扬声器而不是接收器的问题,但我无法测试蓝牙输入端(没有蓝牙设备!)。它可能不像我能收集到的那样OverrideCategoryEnableBluetoothInput实际控制输入输出。

苹果是这样说的:

此属性会影响 kAudioSessionCategory_PlayAndRecord 类别,如下所示: 如果设备的音频输入来自蓝牙耳机,则将此属性设置为 TRUE 会导致音频输出也发送到蓝牙耳机。(音频会话服务参考

一般来说,Apple 不希望应用程序以可能违反用户直觉的方式操纵路由。这个想法是路由应该是用户觉得他们可以控制的东西。

于 2013-04-24T14:39:47.313 回答