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

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

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

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

Благодарю.

Если вы все еще компилируете 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's Microphone.\n\nPlease enable Microphone access for this app in Settings / Privacy / Microphone" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] autorelease] show]; }); } }]; } 

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

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

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

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

 #import  

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

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

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

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

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

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

 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"); } 
  • Как настроить UITextView на его содержимое на iOS 7?
  • Исходное местоположение Услуги, не работающие в iOS 7
  • Проблема автосохранения кадра UICollectionViewCell contentView в ячейке прототипа Storyboard (Xcode 6, iOS 8 SDK) происходит при запуске только на iOS 7
  • UIBarButtonItem с пользовательским представлением, не правильно выровненным на iOS 7 при использовании в качестве элементов панели навигации влево или вправо
  • iOS 7 - Как отобразить выбор даты в виде таблицы?
  • Почему мой коллега MCSession отключается случайно?
  • Метод sizeWithFont устарел. boundingRectWithSize возвращает неожиданное значение
  • UICollectionView не повторно использует ячейки
  • Есть ли способ заставить ячейки UITableView в iOS 7 не иметь разрыв строки в разделителе?
  • Получать глобальный цвет оттенка из кода
  • Как скрыть строку состояния iOS
  • Interesting Posts

    BootStrap3 сохраняет раскрывающееся меню после нажатия на элемент

    Как заставить Excel сохранить содержимое своего буфера обмена

    Существует ли многопользовательское приложение для удаленного рабочего стола для Mac OS X?

    Могу ли я объединить 8-гигабайтный чип с 4-гигабайтным чипом и по-прежнему получать двойное соединение?

    Командная строка Windows 7 Timed Log Off

    Сделайте заставку с индикатором выполнения, например Eclipse

    Как вы находите сумму всех чисел в массиве в Java?

    Требуется ли SqlCommand.Dispose (), если будет установлено связанное SqlConnection?

    Matlab: запуск m-файла из командной строки

    Можете ли вы помочь мне понять это? «Общие ошибки REST: сеансы неактуальны»

    Есть ли способ «ограничить» результат с помощью ELOQUENT ORM Laravel?

    Как создать структуру данных связанного списка в Java?

    Вернуть Windows 7 Photo Viewer в Windows 8?

    Пост-инкремент и концепция предварительного инкремента?

    Hibernate 3.5.x: NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval

    Давайте будем гением компьютера.