iOS: при запуске записи Bluetooth-устройство думает, что я звоню по телефону

У меня есть приложение для записи. У меня возникла проблема: когда я открываю свое приложение и телефон подключен к устройству Bluetooth, как только я начинаю запись, устройство Bluetooth думает, что я начинаю телефонный звонок. Он издает звук исходящего вызова и отображает на экране «ВКЛЮЧЕНО ВЫЗОВА» (всегда говорит об устройстве BT), но, конечно, никакого фактического звонка не происходит.

Вот как я сейчас инициализирую свою сессию:

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

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
                                 withOptions:AVAudioSessionCategoryOptionMixWithOthers | 
                                             AVAudioSessionCategoryOptionAllowBluetooth
                                       error: nil];

Я попробовал это на 2 разных устройствах Bluetooth, и на одном и том же произошли аналогичные результаты. Оба пытаются установить телефонный звонок.

Посмотрев журналы BlueTooth, я нашел подсказку о том, что он делает:

12:24:07.185 A2DPClient.cpp:390        StopStreaming        A2DP       Notice     Stopping A2DP audio streaming
12:24:07.186 A2DPClient.cpp:415        StopStreaming        A2DP       Notice     Sending 'A2DP audio disconnected' event for device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:24:07.201 HandsfreeAudioPlugIn.cpp:971 audioDataAvailable   Handsfree  Notice     HandsfreeAudioPlugIn:: Audio available event for 00:19:B5:FE:05:9B, reason: 2
12:24:07.203 HandsfreeAudioPlugIn.cpp:971 audioDataAvailable   Handsfree  Notice     HandsfreeAudioPlugIn:: Audio available event for 00:19:B5:FE:05:9B, reason: 4
12:24:07.203 HandsfreeAudioPlugIn.cpp:971 audioDataAvailable   Handsfree  Notice     HandsfreeAudioPlugIn:: Audio available event for 00:19:B5:FE:05:9B, reason: 1
12:24:07.203 HandsfreeGateway.cpp:699  createVisualVoicemai Handsfree  Notice     Setting up virtual call
12:24:07.205 AudioSendThread.cpp:91    run                  Audio      Notice     AudioSendThread stopping
12:24:07.207 HandsfreeGateway.cpp:1540 initiateScoConnectio Handsfree  Notice     Initiating SCO connection with delay of 20 milliseconds
12:24:07.207 HandsfreeGateway.cpp:3179 handleUpdateCallStat Handsfree  Notice     Updating call status for call(s): [ [#1: Outgoing to +XXXXXXXXXXXXX "My Number" (voicemail)] ]
12:24:07.207 HandsfreeGateway.cpp:1523 delayScoConnection   Handsfree  Notice     Delaying SCO connection by 20 milliseconds
12:24:07.208 HandsfreeGateway.cpp:3183 handleUpdateCallStat Handsfree  Notice     callPresent: no, callState: 1, callSetup: outgoing, heldStatus: none, heldChanged: no, visualVoicemail: yes
12:24:07.208 HandsfreeGateway.cpp:2871 tellEveryOneAboutVVM Handsfree  Notice     Sending call setup "outgoing" to device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:24:07.208 HandsfreeGateway.cpp:2877 tellEveryOneAboutVVM Handsfree  Notice     Sending call status "call active" to device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:24:07.208 HandsfreeGateway.cpp:2760 operator()           Handsfree  Notice     Sending call setup "none" to device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:24:07.229 HandsfreeGateway.cpp:1626 internalConnectAudio Handsfree  Notice     Making outgoing audio connection to device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:24:07.457 HandsfreeGateway.cpp:1161 audioEvent           Handsfree  Notice     Received audio connected event for device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:24:07.471 A2DPClient.cpp:1384       SuspendCfm           A2DP       Notice     Successfully suspended stream to device 00:19:B5:FE:05:9B "VW_RADIO_55"
12:25:36.959 LeObserver.cpp:904        scanTimer            Discovery  Notice     Session "wirelessproxd-central-35-1" is now at scan level 3
12:25:59.599 HandsfreeAudioPlugIn.cpp:1050 audioPauseNotificati Handsfree  Notice     HandsfreeGateway::audioPauseNotification
12:25:59.599 HandsfreeGateway.cpp:726  deleteVisualVoicemai Handsfree  Notice     Cleaning up virtual call
12:25:59.599 HandsfreeGateway.cpp:1567 internalDisconnectAu Handsfree  Notice     Disconnecting audio from device 00:19:B5:FE:05:9B "VW_RADIO_55"

Что это за настройка виртуального звонка??? Единственное, что я делаю в коде в этот момент, это

[self.audioRecorder record];

self.audioRecorder, конечно же, является экземпляром AVAudioRecorder.

Как я могу предотвратить это?


person Jan    schedule 30.06.2014    source источник


Ответы (1)


Измените параметры AVAudioSession всякий раз, когда вы хотите начать запись и запретить Bluetooth:

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

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
                                 withOptions:AVAudioSessionCategoryOptionMixWithOthers
                                       error: nil];

[self.audioRecorder record];

После завершения записи при вызове делегата экземпляра AVAudioRecorder:

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag

Настройте свои AVAudioSession параметры, чтобы разрешить Bluetooth AVAudioSessionCategoryOptionAllowBluetooth таким образом, AVAudioSession не будет предполагать, что ввод записи должен обрабатываться как голосовой вызов с подключенного устройства BT.

person Pau Senabre    schedule 14.06.2016
comment
Но не отключит ли это мое текущее воспроизведение от устройства Bluetooth, если оно есть? - person Jan; 14.06.2016
comment
да ... это не идеально, но вы также можете сохранить позицию вашего текущего воспроизведения и возобновить его после setCategory. developer.apple.com/library/ios/ документация/аудио/концепция/ - person Pau Senabre; 14.06.2016
comment
Да, это не сработало бы для меня. Это приложение для караоке, поэтому мне нужно, чтобы воспроизведение продолжалось ВО ВРЕМЯ записи. В любом случае спасибо за предложение. - person Jan; 14.06.2016