IOS проверяет, имеет ли приложение доступ к микрофону
С введением iOS 7 приложения должны запросить доступ к микрофонам, когда они хотят записывать аудио.
Как проверить, имеет ли приложение доступ к микрофону?
В SDK iOS 8 я могу использовать перечисление AVAudioSessionRecordPermission
, но как это проверить в iOS 7?
Info:
Я не хочу запрашивать разрешение, я просто хочу проверить, имеет ли приложение доступ к микрофону. (Как доступ к местоположению):
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
// Do something
}
Ответы
Ответ 1
В iOS7
нет способа получить текущий статус microphone authorization
. Они указали enum в iOS8
как AVAudioSessionRecordPermission
В iOS7
вы должны каждый раз запрашивать разрешение с помощью
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
NSLog(@"Permission granted");
}
else {
NSLog(@"Permission denied");
}
}];
Тот же вопрос задан раньше, но нет такого api, с которым вы знаете текущий статус, как в iOS8
Вы можете сослаться Проверить разрешение микрофона на iOS 7 без отображения подсказки
Решение:
Другой вариант - вы можете показать popup
или запросить разрешение в первый раз и сохранить параметры состояния пользователя, выбранные в NSUserDefaults
, а затем не запрашивать разрешения.
Из документов вам явно не нужно вызывать это, если вам не нужно получать разрешение пользователя. Он будет автоматически вызываться AVAudioSession
при первом попытке записи
Для записи звука требуется явное разрешение пользователя. Первый время вашего сеанса аудиозаписей приложений пытается использовать маршрут ввода аудио используя категорию, которая позволяет записывать (см. "Аудиосессия" Категории "), система автоматически запрашивает пользователя для разрешение; альтернативно, вы можете позвонить requestRecordPermission: to подскажите пользователю в удобное для вас время
Ответ 2
Вы можете проверить с помощью recordPermission(), который был доступен с iOS 8.
Имейте в виду, что начиная с iOS 10 вы также должны установить флаг info.plist
для разрешения микрофона.
![введите описание изображения здесь]()
Этот ответ был снова очищен для Swift 4.0
import AVFoundation
switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
print("Permission granted")
case AVAudioSessionRecordPermission.denied:
print("Pemission denied")
case AVAudioSessionRecordPermission.undetermined:
print("Request permission here")
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
// Handle granted
})
}
Swift 3.0
Это проверено на среду iOS 10 для проверки текущего состояния микрофона.
switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
print("Permission granted")
case AVAudioSessionRecordPermission.denied:
print("Pemission denied")
case AVAudioSessionRecordPermission.undetermined:
print("Request permission here")
default:
break
}
Objective-C
Я проверил этот код с iOS 8 с целью проверки разрешения микрофона и получения текущего состояния.
switch ([[AVAudioSession sharedInstance] recordPermission]) {
case AVAudioSessionRecordPermissionGranted:
break;
case AVAudioSessionRecordPermissionDenied:
break;
case AVAudioSessionRecordPermissionUndetermined:
// This is the initial state before a user has made any choice
// You can use this spot to request permission here if you want
break;
default:
break;
}
Как всегда, убедитесь, что import AVFoundation
.
Ответ 3
Есть еще один способ попробовать следующий код для ios 7 и 8:
let microPhoneStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeAudio)
switch microPhoneStatus {
case .Authorized:
// Has access
case .Denied:
// No access granted
case .Restricted:
// Microphone disabled in settings
case .NotDetermined:
// Didn't request access yet
}
Ответ 4
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
И включите <AVFoundation/AVAudioSession.h>
Ответ 5
Swift 3 Complete Solution Code
func checkMicPermission() -> Bool {
var permissionCheck: Bool = false
switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
permissionCheck = true
case AVAudioSessionRecordPermission.denied:
permissionCheck = false
case AVAudioSessionRecordPermission.undetermined:
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
if granted {
permissionCheck = true
} else {
permissionCheck = false
}
})
default:
break
}
return permissionCheck
}
Ответ 6
Поскольку ни один из других ответов здесь не упоминается, вам нужно добавить разрешения на свой info.plist. В частности, добавьте запись для:
Конфиденциальность - Описание использования микрофона
Для значения String введите что-то вроде: (Имя приложения) требуется доступ к вашему микрофону.
В противном случае вы получите таинственный сбой