Mit der Einführung von iOS 7 müssen Anwendungen den Mikrofonzugriff anfordern, wenn sie Audio aufnehmen möchten.
Wie überprüfe ich, ob die Anwendung Zugriff auf das Mikrofon hat?
Im iOS 8-SDK kann ich die AVAudioSessionRecordPermission
-Enumeration verwenden. Wie kann ich dies in iOS 7 überprüfen?
Info:
Ich möchte nicht um Erlaubnis bitten, ich möchte nur prüfen, ob die App Zugriff auf das Mikrofon hat. (Wie Standortzugang):
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
// Do something
}
In iOS7
gibt es keine Möglichkeit, den aktuellen Status von microphone authorization
abzurufen. Sie haben die Enumeration in iOS8
als AVAudioSessionRecordPermission angegeben.
In iOS7
müssen Sie jedes Mal die Erlaubnis mit einholen
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
NSLog(@"Permission granted");
}
else {
NSLog(@"Permission denied");
}
}];
Die gleiche Frage wurde schon einmal gestellt, aber es gibt keine solche API, mit der Sie den aktuellen Status wie in iOS8
kennen.
Sie können referenzieren Überprüfen Sie die Mikrofonberechtigung unter iOS 7, ohne Prompt anzuzeigen
Lösung:
Eine weitere Option ist, dass Sie die Variable popup
anzeigen oder nach der Berechtigung first time fragen und die in NSUserDefaults
ausgewählten Statusoptionen für die Benutzer speichern können. Danach fordern Sie keine Erlaubnis an Wenn Sie nicht alle die Erlaubnis des Benutzers benötigen, wird es beim ersten Versuch automatisch von AVAudioSession
aufgerufen, wenn Sie versuchen, aufzunehmen
Das Aufnehmen von Audio erfordert die ausdrückliche Genehmigung des Benutzers. Der Erste Wenn die Audiositzung Ihrer App versucht, eine Audioeingangsroute zu verwenden Wenn Sie eine Kategorie verwenden, die die Aufnahme ermöglicht (siehe „Audiositzung Kategorien“), fordert das System den Benutzer automatisch zur Eingabe von Genehmigung; Alternativ können Sie requestRecordPermission: bis .__ aufrufen. Fordern Sie den Benutzer zu einem Zeitpunkt Ihrer Wahl auf
Sie können das mit recordPermission () überprüfen, das seit iOS 8 verfügbar ist.
Beachten Sie, dass Sie ab iOS 10 müssen eingestellt die NSMicrophoneUsageDescription
-Eigenschaft in Ihrem info.plist
für Mikrofonberechtigungen festlegen. Sie müssen einen Wert angeben, der in der Zugriffsanforderung angezeigt wird. Wenn Sie Ihre App lokalisieren, müssen Sie Ihre Plist-Zeichenfolgen für die Übersetzung angeben.
Andernfalls kann es zu einem Absturz kommen, wenn versucht wird, auf das Mikrofon zuzugreifen.
Diese Antwort wurde für Swift 4.x wieder aufgeräumt.
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
Dies wurde mit einer iOS 10-Umgebung getestet, um den aktuellen Status des Mikrofons zu überprüfen.
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")
default:
break
}
Ziel c
Ich habe diesen Code mit iOS 8 getestet, um die Mikrofonberechtigung zu prüfen und den aktuellen Status zu erhalten.
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;
}
Stellen Sie wie immer sicher, import AVFoundation
.
Swift 3 Complete Lösungscode
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
}
Es gibt eine andere Möglichkeit, den folgenden Code für iOS 7 und 8 auszuprobieren:
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
}
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
Und füge <AVFoundation/AVAudioSession.h>
hinzu
Da keine der anderen Antworten dies erwähnt hat, müssen Sie die Berechtigungen zu Ihrer info.plist hinzufügen. Fügen Sie insbesondere einen Eintrag für Folgendes hinzu:
Datenschutz - Beschreibung der Mikrofonbenutzung
Geben Sie für den String-Wert Folgendes ein: (App-Name) benötigt Zugriff auf Ihr Mikrofon.
Ansonsten bekommst du einen mysteriösen Absturz
importieren Sie AVFoundation und verwenden Sie die folgende Funktion
var permissionCheck:Bool = false
switch AVAudioSession.sharedInstance().recordPermission {
case AVAudioSession.RecordPermission.granted:
permissionCheck = true
case AVAudioSession.RecordPermission.denied:
permissionCheck = false
case AVAudioSession.RecordPermission.undetermined:
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
if granted {
permissionCheck = true
} else {
permissionCheck = false
}
})
default:
break
}