39

iOS アプリケーションでユーザーがマイクの許可を拒否したことを検出したいと考えています。マイクを録音しようとすると、この値しか取得できません: -120.000000 db

しかし、これを取得する前に、AVAudioSession をセットアップする必要があります。別の機能はありますか?

そして、出力に次のメッセージが表示されました。 Microphone input permission refused - will record only silence

ありがとう。

4

4 に答える 4

51

まだ 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 作業を行わないでください。そうしないと、アプリがハングする可能性があります。上記のコードを調整しました。クライアントは、ありがたいことにベータ版リリースであることにこれを指摘しました。間違いをお詫びします。

于 2013-09-30T09:11:27.857 に答える
42

これは、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 回目以降は、デバイスに保存されている設定に基づいて動作します。

于 2013-09-17T01:20:21.227 に答える
3

迅速な回答:

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");
}
于 2016-08-31T12:49:47.423 に答える
0

Apple の devforum 以外で iOS 7 について話すことが許されているかどうかは 100% 確信が持てませんが、あなたが探している答えはそこで見つかりました

つまり、SDK の AVAudioSession.h ヘッダー ファイルでソリューションを見つけることができます。また、iOS 6 をサポートしながらそれを利用したい場合は、必ず " respondsToSelector:" を使用して API の可用性を確認してください。

于 2013-09-05T00:19:37.563 に答える