AVAudioSession:某些蓝牙设备在我的应用程序上无法正常工作

我正在使用AVAudioSession开发一个快速的audio/video和文本聊天iOS应用程序。

每当我select使用某些蓝牙设备时,设备上播放的声音不是Appaudiostream。 他们只播放文本聊天库发送的系统声音,而不是发送/接收消息。 它不会发生在所有的蓝牙设备,其中一些一切正常。 内置麦克风和扬声器的应用程序也运行良好。

以下是我的class级pipe理设备中最重要的方法:

class MyAudioSession { private var mAudioSession: AVAudioSession; init!() { self.mAudioSession = AVAudioSession.sharedInstance(); do { try self.mAudioSession.setActive(false); try self.mAudioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: .AllowBluetooth); try self.mAudioSession.setMode(AVAudioSessionModeVideoChat); try self.mAudioSession.setActive(true); } catch { return nil; } } func switchToDevice(device: AVAudioSessionPortDescription!) -> Bool { var ret = false; if (device != nil) { do { try self.mAudioSession.setPreferredInput(device); ret = true; } catch { self.logSwitch(device, error: error); } } return ret; } } 

我想了解为什么我的应用程序在某些蓝牙设备上工作不正常。 这些相同的设备在我Cel上的其他应用程序上正常工作。

我做了另一个testing:我改变了所有这一切的MPVolumeView,和完全相同的问题发生,所以这个问题似乎是在audio播放器上。

有谁能给我一个解决这个问题的build议吗?

谢谢。

Jorg,虽然这可能不是最好的答案,我已经能够克服奇怪的蓝牙问题。 我的问题似乎与您的问题类似:

 AVAudioSessionCategoryPlayAndRecord 

这在一些蓝牙设备上引起了一些问题(不是所有的都是这样)。

我最终做的是把类别设置为:

 AVAudioSessionCategoryPlayback 

然后,当我需要logging我会切换到:

 AVAudioSessionCategoryRecord 

然后在完成录音后回到播放。

这是唯一的方法,在这个时候我可以得到不同的输出(扬声器,耳机,蓝牙)之间切换的一致结果。

希望有一些帮助。 猜测这是“AVAudioSessionCategoryPlayAndRecord”