Question Comment détecter la permission d'entrée microphone refusée dans iOS 7


Je voudrais détecter quand un utilisateur a refusé la permission de microphone sur mon application iOS. Je n'obtiens cette valeur que lorsque j'essaie d'enregistrer le microphone: -120.000000 db

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

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

Merci.


37
2017-09-05 00:06


origine


Réponses:


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

Voici comment je l'ai fait. Supprimez le bit autorelease si vous utilisez ARC. Sur iOS6, rien ne se passe et sous iOS7, le message "microphone activé" est consigné ou l'alerte est affichée.

AVAudioSession *session = [AVAudioSession sharedInstance];
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];
            });
        }
    }];
}

MODIFIER: Il se trouve que le bloc withObject est exécuté dans un thread d'arrière-plan. N'utilisez donc pas l'interface utilisateur ou votre application pourrait se bloquer. J'ai ajusté le code ci-dessus. Un client l'a souligné sur ce qui était heureusement une version bêta. Toutes mes excuses pour l'erreur.


51
2017-09-30 09:11



S'il vous plaît noter que cela ne fonctionnera que si construit avec Xcode 5, et non avec 4.6

Ajouter le framework AVFoundation à votre projet

Importez ensuite le fichier d'en-tête AVAudioSession, à partir de l'infrastructure AVFoundation, où vous souhaitez vérifier si le paramètre du microphone est activé.

#import <AVFoundation/AVAudioSession.h>

Ensuite, appelez simplement 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 s'exécute, elle affiche l'invite autorisant l'accès au microphone et, en fonction de la réponse des utilisateurs, exécute le bloc d'achèvement. À partir de la deuxième fois, il ne fera qu'agir en fonction des paramètres stockés sur l'appareil.


42
2017-09-17 01:20



Je ne suis pas sûr à 100% si nous sommes autorisés à parler d'iOS 7 en dehors des devforums d'Apple, mais j'ai trouvé la réponse que tu cherches là-bas.

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


1
2017-09-05 00:19



Réponse rapide:

if AVAudioSession.sharedInstance().recordPermission() == .Denied {
    print("Microphone permission refused");
}

Ou vous pouvez utiliser un framework comme PermissionScope qui permet de vérifier facilement les autorisations. https://github.com/nickoneill/PermissionScope

Edit: Swift 3 répond:

import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
    print("Microphone permission refused");
}

1
2017-08-31 12:49