MPVolumeView Isn't show speaker option on iPad

270 views Asked by At

I'm using MPVolumeView class for switch between audio outputs. In iPhone, you have 2 options on start (iPhone and speaker) and in iPad you have only 1 option (speaker)

But when you connect headphones on iPad there aren't speaker options only headphones.

(In iPhone all work well)

Set MPVolumeView:

private func setUI(){
    let myVolumeView = MPVolumeView(frame: self.speakerButton.bounds)
    myVolumeView.showsVolumeSlider = false
    myVolumeView.setRouteButtonImage(nil, for: .normal)
    self.speakerButton.addSubview(myVolumeView)
}

Build session:

        try session.setPreferredSampleRate(Double(DefaultAudioDevice.kSampleRate))
        try session.setPreferredIOBufferDuration(0.01)
        let audioOptions = AVAudioSessionCategoryOptions.allowBluetooth.rawValue
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVoiceChat, options: AVAudioSessionCategoryOptions(rawValue: audioOptions))
        try session.setActive(true)
        try session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)

I try: - Add AVAudioSessionCategoryOptions.defaultToSpeaker - Change to AVAudioSessionCategoryPlayAndRecord - Remove session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)

The speaker option is never shown on iPad. Only on iPhone

enter image description here

1

There are 1 answers

2
user10743289 On

Try this code

let airplayButton = MPVolumeView()
airplayButton.frame = CGRect(x: myX, y: myY, width: 40, height: 40)
airplayButton.showsVolumeSlider = false
customPlayerControls.view.addSubview(airplayButton)