AVAudioSession setCategory Swift 4.2 iOS 12 - lire le Son sur Muet
De jouer du son, même en mode Silencieux-je utiliser pour utiliser la méthode ci-dessous. Mais comment ça ne fonctionne pas.
//Works on Swift 3
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
} catch {
print(error)
}
Comment le faire fonctionner en 4.2 /iOS 12?
Dans une version plus récente, nous avons besoin de définir le mode et les options.
try AVAudioSession.sharedInstance().setCategory(
<#T##category:AVAudioSession.Category##AVAudioSession.Category#>,
mode: <#T##AVAudioSession.Mode#>,
options: <#T##AVAudioSession.CategoryOptions#>)`
- Aussi loin que je peux dire à partir de la documentation, je pense que ça devrait marcher comme ça:
AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
- Pour les options comme
mixWithOthers
, voir stackoverflow.com/a/39084300/434004, mis à jour pour Swift 4.2. - Cette méthode a été ajouté à nouveau sur Xcode 10.2
Vous devez vous connecter pour publier un commentaire.
Son der Töne commentaire vous montre la nouvelle syntaxe, mais vous devez également activer l'audio de la session après
setCategory
:setCategory()
a été disponible depuis iOS 6 etsetActive()
/sharedInstance()
depuis iOS 3.setCategory:withOptions
(votre mode par défaut est de toute façon) - bien que je ne suis pas sûr de ce qu'il est appelé à swift.AVAudioSession
, c'est un gros inculte singleton de toute façon, la configuration dans swift ne va pas améliorer beaucoup (le contraire dans ce cas).Comme une solution de contournement, vous pouvez appeler l'Objective-C
AVAudioSession.setCategory:
méthode avec leNSObject.performSelector:
:Si vous souhaitez définir la catégorie et les options pour iOS 9 et les versions antérieures alors utiliser:
Mise à JOUR:
Problème est résolu dans Xcode 10.2.
AVAudioSession.sharedInstance().perform(NSSelectorFromString("setCategory:withOptions:error:"), with: AVAudioSession.Category.playback, with: [AVAudioSession.CategoryOptions.duckOthers])
. Cela fonctionne?perform(NSSelectorFromString(
plus.Pour Swift 4.2 d'iOS 12, c'est simplement:
Mise à jour de Xcode 10.2:
Vous pouvez utiliser de l'objectif de la catégorie c pour les aider à résoudre ce problème.
Créer un
AVAudioSession+Swift.h
:Avec un
AVAudioSession+Swift.m
:Ensuite importer le "AVAudioSession+Swift.h" dans votre
<#target_name#>-Bridging-Header.h
Résultat est que vous pouvez appeler la méthode rapide comme avant.
La réponse ci-dessus (par Rythmique Fistman) est correct si votre application n'est pas compatible avec iOS 9 ou ci-dessous.
Si votre application est compatible avec iOS 9, vous verrez l'erreur suivante:
Dans ce cas, il y a un bug avec Swift 4.2, c'est un problème de AVFoundation dans Xcode 10 Sdk, vous pouvez contourner le problème en écrivant un Objectif-C fonction des appels par le biais de l'ancienne API, car ils sont toujours disponibles en Objective-C.
Dans le lien suivant vous pouvez lire plus de détails:
https://forums.swift.org/t/using-methods-marked-unavailable-in-swift-4-2/14949
perform
, comme décrit par ricardopereira réponse.Collez-le dans votre
viewDidLoad()
Swift 5
Code swift 4 :
Espère que ça aide