How to make sound output from Bluetooth instead of speakers in IOS 17

89 Views Asked by At

my issue https://github.com/ryanheise/audio_session/issues/120

When I set the AVAudioSessionCategory avAudioSessionCategory: AVAudioSessionCategory.playAndRecord, sound to come out of the built-in speaker instead of Bluetooth headphones。ios17 。It is normal in IOS 16 or 15

final session = await AudioSession.instance; await session.configure(AudioSessionConfiguration( avAudioSessionCategory: AVAudioSessionCategory.playAndRecord, avAudioSessionCategoryOptions:AVAudioSessionCategoryOptions.allowBluetooth | AVAudioSessionCategoryOptions.allowBluetoothA2dp, avAudioSessionMode: AVAudioSessionMode.defaultMode, avAudioSessionRouteSharingPolicy: AVAudioSessionRouteSharingPolicy.defaultPolicy, avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none, androidAudioAttributes: const AndroidAudioAttributes( contentType: AndroidAudioContentType.music, flags: AndroidAudioFlags.none, usage: AndroidAudioUsage.media, ), androidAudioFocusGainType: AndroidAudioFocusGainType.gain, androidWillPauseWhenDucked: true, ));

How to make sound output from Bluetooth instead of speakers in IOS 17?

How to make sound output from Bluetooth instead of speakers in IOS 17?

1

There are 1 best solutions below

1
On
 [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord mode:AVAudioSessionModeVideoRecording options:nil error:nil];
 
  AVAudioSessionPortDescription *builtInMicPort = nil;
  for (AVAudioSessionPortDescription *portDescription in audioSession.availableInputs) {
      if ([portDescription.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
          builtInMicPort = portDescription;
          break;
      }
  }

  if (builtInMicPort) {
      NSError *inputError = nil;
      [audioSession setPreferredInput:builtInMicPort error:&inputError];

      if (inputError) {
          NSLog(@"inputError:%@", inputError);
      }else{
          NSLog(@"change success");
      }
  } else {
      NSLog(@"inputError");
  }
  [audioSession setActive:YES error:nil];

set mode AVAudioSessionModeVideoRecording normall