39 votes

Comment détecter une autorisation d'entrée de microphone refusée sous iOS 7

Je souhaite détecter lorsqu'un utilisateur a refusé l'autorisation du microphone sur mon application iOS. Je n'obtiens cette valeur que lorsque j'essaie d'enregistrer le microphone: -120.000000 db

Mais avant d'obtenir cela, je dois configurer une AVAudioSession. Y a-t-il une autre fonction?

Et j'ai eu ce message dans la sortie: Microphone input permission refused - will record only silence

Merci.

51voto

Ben Clayton Points 16793

Si vous êtes toujours compiler avec le SDK iOS 6.0 (que je suis), vous devez être un peu plus indirecte que @Luis E. Prado, comme le requestRecordPermission méthode n'existe pas.

Voici comment je l'ai fait. Supprimer la autorelease bits si vous utilisez un ARC. Sur iOS6, rien ne se passe, et sur iOS7 le microphone est activé message est enregistré ou l'alerte est apparu.

if ([session respondsToSelector:@selector(requestRecordPermission:)]) {
    [session performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
            NSLog(@"Microphone is enabled..");
        }
        else {
            // Microphone disabled code
            NSLog(@"Microphone is disabled..");

            // We're in a background thread here, so jump to main thread to do UI work.
            dispatch_async(dispatch_get_main_queue(), ^{
                [[[[UIAlertView alloc] initWithTitle:@"Microphone Access Denied"
                                        message:@"This app requires access to your device's Microphone.\n\nPlease enable Microphone access for this app in Settings / Privacy / Microphone"
                                       delegate:nil
                              cancelButtonTitle:@"Dismiss"
                              otherButtonTitles:nil] autorelease] show];
            });
        }
    }];
}

EDIT: Il s'avère que le withObject bloc est exécuté dans un thread d'arrière-plan, afin de NE PAS faire de l'INTERFACE utilisateur de travailler dans il y, ou de votre application peut se bloquer. J'ai ajusté le code ci-dessus. Un client l'a souligné sur ce qui était heureusement qu'une version bêta. Toutes nos excuses pour cette erreur.

42voto

Luis E. Prado Points 1066

Veuillez noter que cela ne fonctionne que si elle est construite avec Xcode 5, et pas avec 4,6

Ajouter le AVFoundation Cadre de votre projet

Puis importer le AVAudioSession fichier d'en-tête, de la AVFoundation cadre, où vous avez l'intention de vérifier si le microphone est activé

#import <AVFoundation/AVAudioSession.h>

Puis il suffit d'appeler cette méthode

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
            if (granted) {
                // Microphone enabled code
            }
            else {
                // Microphone disabled code
            }
        }];

La première fois que cette méthode fonctionne, il affichera l'invite pour permettre l'accès au microphone et basé sur la réaction des utilisateurs, il exécutera la fin du bloc. À partir de la deuxième fois, il suffit d'agir en fonction du réglage enregistré sur l'appareil.

1voto

Michael Dautermann Points 47757

Je ne suis pas certain à 100% s'il est autorisé à parler d'iOS 7 en dehors des forums de développeurs d'Apple, mais j'ai trouvé la réponse que vous cherchez .

En bref, vous trouverez votre solution dans le fichier d’en-tête AVAudioSession.h du SDK. Et si vous souhaitez l'utiliser tout en prenant en charge iOS 6, veillez à utiliser " respondsToSelector: " pour vérifier la disponibilité de l'API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X