web-dev-qa-db-fra.com

iOS vérifie si l'application a accès au microphone

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
}
21
Lukas

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

23
codester

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.

 enter image description here

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.

54
CodeBender

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
    }
11
mriaz0011

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
}
8
user3873271
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
        }
        else {
            // Microphone disabled code
        }
    }];

Et inclure <AVFoundation/AVAudioSession.h>

5
souvickcse

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 

3
Hugh

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
        }
0
varunrathi28