Avec l'introduction d'iOS 7, les applications doivent demander l'accès au microphone lorsqu'elles souhaitent enregistrer de l'audio.
Comment vérifier si l'application a accès au microphone?
Dans le SDK iOS 8, je peux utiliser l'énumération AVAudioSessionRecordPermission
, mais comment puis-je vérifier cela dans iOS 7?
Info:
Je ne veux pas demander la permission, je veux juste vérifier si l'application a accès au microphone. (Comme l'accès à l'emplacement):
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
// Do something
}
Dans iOS7
, il n'existe aucun moyen d'obtenir le statut actuel de microphone authorization
. Ils ont indiqué l'énumération dans iOS8
sous la forme/ AVAudioSessionRecordPermission
Dans iOS7
, vous devez demander à chaque fois la permission avec
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
NSLog(@"Permission granted");
}
else {
NSLog(@"Permission denied");
}
}];
La même question a déjà été posée, mais il n’existe pas d’API avec laquelle vous connaissez l’état actuel, comme dans iOS8
Vous pouvez vous référer Vérifier l’autorisation de micro sur iOS 7 sans afficher Invite
Solution:
Une autre option est que vous pouvez afficher la variable popup
ou demander la permission première fois et enregistrer l'option d'état de l'utilisateur sélectionnée dans la variable NSUserDefaults
et ne pas demander la permission . Depuis les documents, vous n'avez explicitement pas besoin de l'appeler. si vous n'avez pas besoin d'obtenir la permission de l'utilisateur. Il sera automatiquement appelé par AVAudioSession
pour la première fois lorsque vous essayez d'enregistrer
L'enregistrement audio nécessite une autorisation explicite de l'utilisateur. La première la session audio de votre application tente d’utiliser un itinéraire d’entrée audio lors de l'utilisation d'une catégorie permettant l'enregistrement (voir «Session audio Catégories»), le système invite automatiquement l'utilisateur à entrer autorisation; Vous pouvez également appeler requestRecordPermission: to Demander à l'utilisateur à un moment de votre choix
Vous pouvez vérifier avec recordPermission () , disponible depuis iOS 8.
N'oubliez pas qu'à partir de iOS 10, vous devez définir la propriété NSMicrophoneUsageDescription
dans votre info.plist
pour les autorisations de microphone. Vous devez fournir une valeur qui sera indiquée dans la demande d'accès. Si vous localisez votre application, veillez à inclure les chaînes de votre liste de sélection pour la traduction.
Le non-respect de cette consigne entraînera un blocage lors de la tentative d'accès au microphone.
Cette réponse a été nettoyée à nouveau pour Swift 4.x
import AVFoundation
switch AVAudioSession.sharedInstance().recordPermission {
case AVAudioSessionRecordPermission.granted:
print("Permission granted")
case AVAudioSessionRecordPermission.denied:
print("Pemission denied")
case AVAudioSessionRecordPermission.undetermined:
print("Request permission here")
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
// Handle granted
})
}
Swift 3.0
Cela a été testé sur un environnement iOS 10 pour vérifier l'état actuel du microphone.
import AVFoundation
switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
print("Permission granted")
case AVAudioSessionRecordPermission.denied:
print("Pemission denied")
case AVAudioSessionRecordPermission.undetermined:
print("Request permission here")
default:
break
}
Objectif c
J'ai testé ce code avec iOS 8 dans le but de vérifier l'autorisation du microphone et d'obtenir l'état actuel.
switch ([[AVAudioSession sharedInstance] recordPermission]) {
case AVAudioSessionRecordPermissionGranted:
break;
case AVAudioSessionRecordPermissionDenied:
break;
case AVAudioSessionRecordPermissionUndetermined:
// This is the initial state before a user has made any choice
// You can use this spot to request permission here if you want
break;
default:
break;
}
Comme toujours, assurez-vous de import AVFoundation
.
Code de solution complète Swift 3
func checkMicPermission() -> Bool {
var permissionCheck: Bool = false
switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
permissionCheck = true
case AVAudioSessionRecordPermission.denied:
permissionCheck = false
case AVAudioSessionRecordPermission.undetermined:
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
if granted {
permissionCheck = true
} else {
permissionCheck = false
}
})
default:
break
}
return permissionCheck
}
Il existe un autre moyen d'essayer de suivre le code pour ios 7 et 8:
let microPhoneStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeAudio)
switch microPhoneStatus {
case .Authorized:
// Has access
case .Denied:
// No access granted
case .Restricted:
// Microphone disabled in settings
case .NotDetermined:
// Didn't request access yet
}
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
Et inclure <AVFoundation/AVAudioSession.h>
Etant donné qu'aucune des autres réponses ici mentionnées ne mentionne cela, vous devez ajouter les autorisations à votre info.plist. Plus précisément, ajoutez une entrée pour:
Confidentialité - Description de l'utilisation du microphone
Pour la valeur String, entrez quelque chose comme: (Nom de l'application) nécessite un accès à votre microphone.
Sinon, vous obtenez un crash mystérieux
importer AVFoundation et utiliser la fonction suivante
var permissionCheck:Bool = false
switch AVAudioSession.sharedInstance().recordPermission {
case AVAudioSession.RecordPermission.granted:
permissionCheck = true
case AVAudioSession.RecordPermission.denied:
permissionCheck = false
case AVAudioSession.RecordPermission.undetermined:
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
if granted {
permissionCheck = true
} else {
permissionCheck = false
}
})
default:
break
}