Воспроизведение звука при использовании устройства в бесшумном режиме - ios swift
Я создаю приложение, используя xcode 7.1, swift. Я хочу воспроизвести аудио. Все отлично. Теперь моя проблема: я хочу услышать звук, когда устройство находится в тихом режиме или приглушено. Как я могу это сделать?
Я использую следующий код для воспроизведения аудио
currentAudio!.stop()
currentAudio = try? AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sample_audio", ofType: "mp3")!));
currentAudio!.currentTime = 0
currentAudio!.play();
Ответы
Ответ 1
Поместите эту строку перед вызовом play() метода AVPlayer.
В объективе C
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayback
error: nil];
В Swift
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
}
catch {
// report for an error
}
Swift 5
do {
try AVAudioSession.sharedInstance().setCategory(.playback)
} catch(let error) {
print(error.localizedDescription)
}
Ответ 2
Swift 3.0 и Xcode > 8
Воспроизведение звука в видео, когда устройство находится в режиме RINGER и режиме SLIENT
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
//print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
//print("AVAudioSession is Active")
} catch _ as NSError {
//print(error.localizedDescription)
}
} catch _ as NSError {
//print(error.localizedDescription)
}
Ответ 3
Swift 4
используйте эту строку перед воспроизведением видео
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
Ответ 4
Вы можете использовать класс AppDelegate
.
Для включения звука (для аудио или видео), когда устройство находится в беззвучном режиме, используйте AVAudioSessionCategoryPlayback :
func applicationDidBecomeActive(_ application: UIApplication) {
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
} catch {
print("AVAudioSessionCategoryPlayback not work")
}
}
Для отключения звука, когда устройство находится в беззвучном режиме (например, когда мы отвечаем на звонок), используйте AVAudioSessionCategorySoloAmbient :
func applicationWillResignActive(_ application: UIApplication) {
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
} catch {
print("AVAudioSessionCategorySoloAmbient not work")
}
}
Ответ 5
Swift 4.2
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
} catch let error {
print("Error in AVAudio Session\(error.localizedDescription)")
}
Ответ 6
Вы можете пройти через это, это поможет вам
При использовании следующих категорий аудиосоединений звуки не будут отключены в iOS: AVAudioSessionCategoryPlayback,AVAudioSessionCategoryRecord,AVAudioSessionCategoryPlayAndRecord
Пример
func playSound (Sound: String, Type: String) {
//Prepare the sound file name & extension
var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(Sound, ofType: Type)!)
//Preparation to play
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
//Play audio
var error: NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
audioPlayer.prepareToPlay()
audioPlayer.play()
}
Ответ 7
import AVKit
И добавьте это в раздел AppDelegate applicationDidBecomeActive
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
print("AVAudioSession is Active")
} catch {
print(error.localizedDescription)
}
} catch {
print(error.localizedDescription)
}
}
Ответ 8
Swift 5.0.1
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)