在我的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耳机的声音,如果蓝牙处于关闭状态,则我不会听到来自扬声器的声音。我该如何解决这个问题?

最佳答案

您是否尝试过使用changeDefaultRoute代替扬声器的audioRouteOverride

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

这样可以解决输出到扬声器而不是接收器的问题,但是我无法测试蓝牙输入端(没有蓝牙设备!)。可能不是因为我可以收集的OverrideCategoryEnableBluetoothInput实际上控制了输入和输出。

苹果说:



通常,Apple不希望应用程序以可能违反用户直觉的方式来操纵路由。这个想法是,路由应该是用户感到可以控制的东西。

10-06 03:37