Как обнаружить разрешение на вход микрофона, отклоненное в iOS 7
Я хотел бы узнать, когда пользователь отказался от разрешения микрофона на моем приложении iOS. Я получаю это значение только при попытке записать микрофон: -120.000000 дБ
Но прежде, чем это сделать, мне нужно настроить AVAudioSession. Есть ли еще одна функция?
И я получил это сообщение на выходе: Microphone input permission refused - will record only silence
- Как скрыть строку состояния iOS
- ITunes обзор URL и iOS 7 (попросите пользователей оценить наше приложение) AppStore показать пустую страницу
- Проблема автосохранения кадра UICollectionViewCell contentView в ячейке прототипа Storyboard (Xcode 6, iOS 8 SDK) происходит при запуске только на iOS 7
- Замена на устаревший размерWithFont: в iOS 7?
- Не удается скрыть строку состояния в iOS7
Благодарю.
- iOS 7 sizeWithAttributes: замена для sizeWithFont: constrainedToSize
- Панель состояния iOS 7 возвращается к стилю iOS 6 по умолчанию в приложении iPhone?
- Ошибка утверждения UICollectionView для устаревших данных
- Как настроить UITextView на его содержимое на iOS 7?
- Масштабирование и прокрутка в SpriteKit
- Как нарисовать линию в Sprite-kit
- iOS 7 - Как отобразить выбор даты в виде таблицы?
- Как изменить цвет текста строки состояния в iOS
Если вы все еще компилируете 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"); }