2015-10-11 13 views
6

これは、ユーザーがマイクを使用する許可を与えた(または辞退した)後に、何らかの機能を呼び出す必要があることです。iOSでマイクの許可を与えるユーザーを検出するにはどうすればよいですか?

私はすでにこの見た:しかし、これは現在の状態を検出するためにのみ機能します

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
     if (granted) { 
      // Microphone enabled code 
      [self someFunction]; 

     } 
     else { 
      // Microphone disabled code 
     } 
}]; 

を。

現在の状態が「いいえ」でポップアップが表示され、ユーザが許可を与えた場合、その機能は呼び出されません。これを実行する瞬間にアクセス許可は「いいえ」で、次回にコードを実行するまで関数が呼び出されないためです。

私がしたいことは、ユーザーが「許可」または「拒否」を押した後に関数を呼び出すことです。

誰でもこの方法を知っていますか?

EDIT: iOS 7.0互換の解決策が必要です。

+1

-

例は次のようになりますそれがそうであれば、タイマーは止まり、アプリケーションは期待どおりの目的になります。 – vaid

+0

でもそうだよ。 – veich

答えて

11

の方法iOS 8で導入されたAVAudioSessionrecordPermissionです。これにより、AVAudioSessionRecordPermissionという名前の列挙型が返されます。スイッチを使用して、許可アラートがユーザーに提示されているかどうかを判断できます。この方法では、requestRecordPermissionがユーザーに提示されていない場合にのみ呼び出します。そのため、ユーザーが最初に許可を許可または禁止した後で許可ブロックが実行されていると見なすことができます。しかし、あなたはアプリが権限ごとに1を持っているかどうかを確認するタイマーを作成することができ、私はあなたが自動レコードの権限の選択を検出することができることを考えていない

AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission]; 

switch (permissionStatus) { 
    case AVAudioSessionRecordPermissionUndetermined:{ 
      [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
      // CALL YOUR METHOD HERE - as this assumes being called only once from user interacting with permission alert! 
       if (granted) { 
        // Microphone enabled code 
       } 
       else { 
        // Microphone disabled code 
       } 
      }]; 
      break; 
      } 
    case AVAudioSessionRecordPermissionDenied: 
      // direct to settings... 
      break; 
    case AVAudioSessionRecordPermissionGranted: 
      // mic access ok... 
      break; 
    default: 
      // this should not happen.. maybe throw an exception. 
      break; 
} 
+0

これは私の朗読のようですが、私は互換性のあるソリューションをiOS 7.0必要があることを忘れていました。私は努力のために解決策に投票します。 – veich

+1

私は参照してください...アクセス許可アラートはユーザーに一度だけ提示されているので、requestRecordPermissionを呼び出した後、NSUserDefaultsに何らかのフラグを書き込むことを検討してください。しかし、呼び出す前にフラグをチェックしてください。それが存在しない場合は、最初に呼び出されたことを知っているので、私の答えとして許可ブロックに同様の前提を設定することができます。 – Bamsworld

0

使用はまだあなたの許可を与えられていない場合は、次の手順を実行します。

  1. まず、ポップアップダイアログ
  2. はOP

でコードを実行して表示さ -

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission)]) { 
    [[AVAudioSession sharedInstance] requestRecordPermission]; 
    // Now run your function 
} 
+1

OPは、マイクにアクセスしようとしているときに、iOSがポップアップする自動録音リクエストをキャプチャしたいと思うと思う。 – vaid

+0

私はOPが何であるか、このコードをどこから実行すべきか分かりません。 これを追加しようとするとコードがすぐに実行されるので、ユーザーの応答をキャプチャする方法はありません – veich

+1

OPは「オリジナルのポスター」を意味します。コードはメソッド内に挿入できます。メソッドが呼び出されると、このコードが実行されます。 – vaid

関連する問題