iOS - Когато започне запис, bluetooth устройството смята, че провеждам телефонно обаждане

Имам приложение за запис. Срещам проблем, че когато отворя приложението си и телефонът е сдвоен с bluetooth устройство, веднага щом започна да записвам, bluetooth устройството смята, че започвам телефонно обаждане. Издава звук за изходящо повикване и показва на екрана „ON CALL“ (винаги говори за 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