IOS 7の導入により、アプリケーションは、オーディオを録音するときにマイクへのアクセスを要求する必要があります。
アプリケーションがマイクにアクセスできるかどうかを確認するにはどうすればよいですか?
iOS 8 SDKではAVAudioSessionRecordPermission
列挙型を使用できますが、iOS 7でこれを確認するにはどうすればよいですか?
情報:
許可をリクエストしたくありません。アプリがマイクにアクセスできるかどうかを確認したいだけです。 (ロケーションアクセスと同様):
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
// Do something
}
iOS7
には、microphone authorization
の現在のステータスを取得する方法がありません。彼らはiOS8
の列挙型を AVAudioSessionRecordPermission として指定しました
iOS7
では、毎回許可をリクエストする必要があります
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
NSLog(@"Permission granted");
}
else {
NSLog(@"Permission denied");
}
}];
同じ質問が以前に聞かれましたが、iOS8
のような現在のステータスを知っているAPIはありません
参照することができます プロンプトを表示せずにiOS 7でマイクの許可を確認してください
解決策:
別のオプションは、popup
を表示するか、許可を求める初回で、NSUserDefaults
以降は許可を求めません。ドキュメントから、ユーザーの許可を取得する必要がない場合、明示的にこれを呼び出す必要はありません。記録しようとすると、最初にAVAudioSession
によって自動的に呼び出されます
オーディオの録音には、ユーザーの明示的な許可が必要です。アプリのオーディオセッションが録音を有効にするカテゴリ(「オーディオセッションカテゴリ」を参照)を使用しているときにオーディオ入力ルートを初めて使用しようとすると、システムは自動的にユーザーに許可を求めます。または、requestRecordPermission:を呼び出して、選択したときにユーザーにプロンプトを出すことができます。
recordPermission() で確認できます。これはiOS 8以降で利用可能です。
IOS 10以降では、マイクの許可を得るためにinfo.plist
のNSMicrophoneUsageDescription
プロパティを設定する必要があるに注意してください。アクセスリクエストに表示される値を指定する必要があります。アプリをローカライズする場合は、翻訳用のplist文字列を必ず含めてください。
そうしないと、マイクにアクセスしようとするとクラッシュします。
この答えはSwift 4.xで再び整理されました
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.
これは、マイクの現在の状態を確認するためにiOS 10環境に対してテストされています。
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
}
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
を確認してください。
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
}
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
}
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
そして、<AVFoundation/AVAudioSession.h>
ここに記載されている他の回答にはこれについて言及されていないため、info.plistにアクセス許可を追加する必要があります。具体的には、次のエントリを追加します。
プライバシー-マイクの使用法の説明
文字列値には、次のように入力します:(アプリ名)マイクへのアクセスが必要です。
そうしないと、神秘的なクラッシュが発生します
aVFoundationをインポートし、次の関数を使用します
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
}