23

私は新しい iOS7 開発者 SDK を使用しており、アプリが初めて録音しようとしたときに、マイクから録音する許可をユーザーに要求します。 ここに画像の説明を入力

私のアプリはカウントダウン後に記録するため、ユーザーはこのリクエストを見ることができません。このコードを使用して次を確認しrequestRecordPermissionます。

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
            if (granted) {
                // Microphone enabled code
            }
            else {
                // Microphone disabled code
            }
        }];

しかし、記録を開始する前に自分でリクエストをトリガーするにはどうすればよいですか?

4

6 に答える 6

12

これが私にとってうまくいく最終的なコードスニペットです。Xcode 4 と 5 の両方をサポートし、iOS5+ で動作します。

#ifndef __IPHONE_7_0
    typedef void (^PermissionBlock)(BOOL granted);
#endif

    PermissionBlock permissionBlock = ^(BOOL granted) {
        if (granted)
        {
            [self doActualRecording];
        }
        else
        {
            // Warn no access to microphone
        }
    };

    // iOS7+
    if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)])
    {
        [[AVAudioSession sharedInstance] performSelector:@selector(requestRecordPermission:)
                                              withObject:permissionBlock];
    }
    else
    {
        [self doActualRecording];
    }
于 2013-09-30T14:28:43.517 に答える
7

「One Man Crew」が主張したように、requestRecordPermission を使用できます。

requestRecordPermission が実装されていることを確認する必要があることに注意してください。その理由は、アプリが古い iOS バージョン (iOS 6.x など) で実行される場合、この呼び出しの後にクラッシュするためです。これを防ぐには、このセレクターが実装されていることを確認する必要があります (とにかく、これは良い習慣です)。

コードは次のようになります。

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)]){
    [[AVAudioSession sharedInstance] requestRecordPermission];
}

この方法を使用すると、アプリは新しい OS と以前のバージョンの OS をサポートします。

Apple が新しい OS に機能を追加するたびに、私はこの方法を使用しています (そうすれば、古いバージョンを非常に簡単にサポートできます)。

于 2013-06-13T19:34:14.597 に答える