Как обнаружить разрешение на вход микрофона, отклоненное в iOS 7
Я хотел бы узнать, когда пользователь отказался от разрешения микрофона на моем приложении iOS. Я получаю это значение только при попытке записать микрофон: -120.000000 дБ
Но прежде, чем это сделать, мне нужно настроить AVAudioSession. Есть ли еще одна функция?
И я получил это сообщение на выходе: Microphone input permission refused - will record only silence
- Как остановить нежелательную анимацию UIButton при изменении названия?
- Показать / скрыть UIToolbar, «перемещать пальцы», точно так же, как, например, в iOS7 Safari
- Как найти размер файла перед загрузкой его в iOS 7?
- Ошибка утверждения UICollectionView для устаревших данных
- Как изменить цвет текста и значков для tabBarItems в iOS 7?
Благодарю.
- Динамический заголовок JQuery Mobile 1.4.1
- Строка состояния не исчезнет
- Не удается скрыть строку состояния в iOS7
- iOS 7 iPad Safari Пейзаж innerHeight / внешний дизайн макета
- Восстановить пре-iOS7 UINavigationController pushViewController animation
- Как нарисовать линию в Sprite-kit
- Поиск расстояния от значения RSSI устройства Bluetooth с низким энергопотреблением
- UITableView начинается со смещения в iOS 7
Если вы все еще компилируете 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"); }