iOS アプリケーションでユーザーがマイクの許可を拒否したことを検出したいと考えています。マイクを録音しようとすると、この値しか取得できません: -120.000000 db
しかし、これを取得する前に、AVAudioSession をセットアップする必要があります。別の機能はありますか?
そして、出力に次のメッセージが表示されました。
Microphone input permission refused - will record only silence
ありがとう。
iOS アプリケーションでユーザーがマイクの許可を拒否したことを検出したいと考えています。マイクを録音しようとすると、この値しか取得できません: -120.000000 db
しかし、これを取得する前に、AVAudioSession をセットアップする必要があります。別の機能はありますか?
そして、出力に次のメッセージが表示されました。
Microphone input permission refused - will record only silence
ありがとう。
まだ iOS SDK 6.0 でコンパイルしている場合 (私のように)、requestRecordPermission メソッドが存在しないため、@Luis E. Prado よりも少し間接的にする必要があります。
これが私がやった方法です。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];
});
}
}];
}
編集: withObject ブロックはバックグラウンド スレッドで実行されることが判明したため、そこで UI 作業を行わないでください。そうしないと、アプリがハングする可能性があります。上記のコードを調整しました。クライアントは、ありがたいことにベータ版リリースであることにこれを指摘しました。間違いをお詫びします。
これは、Xcode 5 でビルドされた場合にのみ機能し、4.6 では機能しないことに注意してください。
プロジェクトに AVFoundation フレームワークを追加する
次に、マイク設定が有効になっているかどうかを確認する AVFoundation フレームワークから AVAudioSession ヘッダー ファイルをインポートします。
#import <AVFoundation/AVAudioSession.h>
次に、このメソッドを呼び出すだけです
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
// Microphone enabled code
}
else {
// Microphone disabled code
}
}];
このメソッドを初めて実行すると、マイクへのアクセスを許可するプロンプトが表示され、ユーザーの応答に基づいて完了ブロックが実行されます。2 回目以降は、デバイスに保存されている設定に基づいて動作します。
迅速な回答:
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");
}
Apple の devforum 以外で iOS 7 について話すことが許されているかどうかは 100% 確信が持てませんが、あなたが探している答えはそこで見つかりました。
つまり、SDK の AVAudioSession.h ヘッダー ファイルでソリューションを見つけることができます。また、iOS 6 をサポートしながらそれを利用したい場合は、必ず " respondsToSelector:
" を使用して API の可用性を確認してください。