Подтвердить что ты не робот

Как обнаружить разрешение на вход микрофона, отклоненное в iOS 7

Я хотел бы узнать, когда пользователь отказался от разрешения микрофона на моем приложении iOS. Я получаю это значение только при попытке записать микрофон: -120.000000 дБ

Но прежде, чем это сделать, мне нужно настроить AVAudioSession. Есть ли другая функция?

И я получил это сообщение на выходе: Microphone input permission refused - will record only silence

Спасибо.

4b9b3361

Ответ 1

Если вы все еще компилируете iOS SDK 6.0 (как и я), вы должны быть немного более косвенными, чем @Luis E. Prado, поскольку метод requestRecordPermission не существует.

Вот как я это сделал. Удалите бит автосохранения, если вы используете ARC. На iOS6 ничего не происходит, и на iOS7 либо регистрируется сообщение "микрофон", либо появляется предупреждение.

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 Microphone.\n\nPlease enable Microphone access for this app in Settings / Privacy / Microphone"
                                       delegate:nil
                              cancelButtonTitle:@"Dismiss"
                              otherButtonTitles:nil] autorelease] show];
            });
        }
    }];
}

РЕДАКТИРОВАТЬ. Оказывается, блок withObject выполняется в фоновом потоке, поэтому НЕ выполняйте какой-либо пользовательский интерфейс там, или ваше приложение может висеть. Я скорректировал код выше. Клиент указал на то, что было к счастью бета-версией. Извините за ошибку.

Ответ 2

Обратите внимание, что это будет работать только при построении с помощью Xcode 5, а не с 4.6

Добавьте AVFoundation Framework в свой проект

Затем импортируйте файл заголовка AVAudioSession из структуры AVFoundation, где вы хотите проверить, включена ли настройка микрофона.

#import <AVFoundation/AVAudioSession.h>

Затем просто вызовите этот метод

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

В первый раз, когда этот метод запущен, он отобразит приглашение, чтобы разрешить доступ к микрофонам и на основании ответа пользователей он выполнит блок завершения. Со второго раза он будет действовать только на основе сохраненной настройки на устройстве.

Ответ 3

Я не уверен на 100%, если нам разрешено говорить о iOS 7 за пределами Apple devforums, но я нашел ответ, который вы ищете там.

Короче говоря, вы найдете свое решение в файле заголовка AVAudioSession.h в SDK. И если вы хотите использовать его при поддержке iOS 6, обязательно используйте "respondsToSelector:", чтобы проверить наличие API.

Ответ 4

Быстрый ответ:

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

Или вы можете использовать фреймворк, такой как PermissionScope, который позволяет легко проверять разрешения. https://github.com/nickoneill/PermissionScope

Изменить: Swift 3 ответ:

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