Как не вызывать didDeactivate и didActivate в CallKit - PullRequest
0 голосов
/ 24 апреля 2019

У меня проблема с двойным вызовом на CallKit.Когда я принимаю новый вызов, я теряю sound/audio.Я думаю, что проблема возникает, когда вызываются didDeactivate и didActivate, потому что когда я вручную отключаю и активирую AVAudioSession, я также теряю sound/audio.Я хотел знать, можно ли было отключить didDeactivate и didActivate ...

Спасибо.

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
    print("Received \(#function)")
    print("ACTIVATE")
    activateAudioSession()
}


func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
    print("Received \(#function)")
    print("DEACTIVATE")
    deactivateAudioSession()
}


- (void) activateAudioSession {

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    NSError *setError = nil;

    [audioPlayer play];

    [audioSession setActive: NO error: nil];
    if (![[audioSession category] isEqualToString:AVAudioSessionCategoryPlayAndRecord])
        [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth error:&setError];
    if (![[audioSession mode] isEqualToString:AVAudioSessionModeVoiceChat])
        if ([AVAudioSession instancesRespondToSelector: @selector (setMode:error:)]) {
            [audioSession setMode:AVAudioSessionModeVoiceChat error:&setError];
        }

    [audioSession setActive: YES withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth error: nil];

}


- (void) deactivateAudioSession {
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioPlayer stop];
    [audioSession setActive: NO error: nil];
}
...