diff --git a/record_darwin/darwin/Classes/RecordConfig.swift b/record_darwin/darwin/Classes/RecordConfig.swift index f42ab47c..3664af57 100644 --- a/record_darwin/darwin/Classes/RecordConfig.swift +++ b/record_darwin/darwin/Classes/RecordConfig.swift @@ -74,6 +74,7 @@ struct IosConfig { #if os(iOS) extension IosConfig { let audioCategories: [AVAudioSession.CategoryOptions] + let manageAudioSession: Bool init(map: [String: Any]) { let comps = map["audioCategories"] as? String @@ -99,6 +100,7 @@ extension IosConfig { } } self.audioCategories = options ?? [] + self.manageAudioSession = map["manageAudioSession"] as? Bool ?? true } } #endif \ No newline at end of file diff --git a/record_darwin/ios/Classes/delegate/RecorderFileDelegate.swift b/record_darwin/ios/Classes/delegate/RecorderFileDelegate.swift index 364be303..58ddb44d 100644 --- a/record_darwin/ios/Classes/delegate/RecorderFileDelegate.swift +++ b/record_darwin/ios/Classes/delegate/RecorderFileDelegate.swift @@ -8,7 +8,9 @@ class RecorderFileDelegate: NSObject, AudioRecordingFileDelegate, AVAudioRecorde func start(config: RecordConfig, path: String) throws { try deleteFile(path: path) - try initAVAudioSession(config: config) + if config.iosConfig?.manageAudioSession ?? true { + try initAVAudioSession(config: config) + } let url = URL(fileURLWithPath: path) diff --git a/record_platform_interface/lib/src/types/record_config.dart b/record_platform_interface/lib/src/types/record_config.dart index 4a5810d0..8d8abbdf 100644 --- a/record_platform_interface/lib/src/types/record_config.dart +++ b/record_platform_interface/lib/src/types/record_config.dart @@ -120,13 +120,19 @@ class IosRecordConfig { /// Constants that specify optional audio behaviors. /// https://developer.apple.com/documentation/avfaudio/avaudiosession/categoryoptions final List audioCategories; + /// Manage the shared AVAudioSession (defaults to `true`). + /// Set this to false if another plugin is already managing the AVAudioSession. + /// If false, audioCategories config will have no effect. + final bool manageAudioSession; const IosRecordConfig({ - this.audioCategories = const [IosAudioCategories.defaultToSpeaker, IosAudioCategories.allowBluetooth, IosAudioCategories.allowBluetoothA2DP] + this.audioCategories = const [IosAudioCategories.defaultToSpeaker, IosAudioCategories.allowBluetooth, IosAudioCategories.allowBluetoothA2DP], + this.manageAudioSession = true, }); Map toMap() { return { - "audioCategories": audioCategories.map((e) => e.name).join(',') + "audioCategories": audioCategories.map((e) => e.name).join(','), + "manageAudioSession": manageAudioSession, }; }