2016-12-05 9 views
1

私はiOS 10のマイクに許可を求める際に奇妙な問題があります。私は適切なplistプロパティ(Privacy - Microphone Usage Description)コード。私の電話機では、マイクが動作し、有効になっており、携帯電話のアプリ設定で表示されます。ただし、友人の電話では、マイクから許可が求められますが、マイクオプションはアプリの設定に表示されません。パーミッションを正しく設定しても、私はここで何か不足していますか?なぜ私の電話は設定では表示されますが、友人の電話では表示されませんでしたか?私はiPhone SEを持っていて、私の友人はiPhone 6を持っています。iOSマイクロフォンオプションは許可されていてもアプリケーション設定にありません

plistのプロパティ:許可を求める

<key>NSMicrophoneUsageDescription</key> 
<string>Used to capture microphone input</string> 

コード:

if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio] == AVAuthorizationStatusAuthorized) { 
    [self configureMicrophone]; 
} 
else { 
    UIAlertController *deniedAlert = [UIAlertController alertControllerWithTitle:@"Use your microphone?" 
                     message:@"The FOO APP requires access to your microphone to work!" 
                    preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"Go to Settings" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action){ 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; 
    }]; 
    [deniedAlert addAction:action]; 
    [self presentViewController:deniedAlert animated:YES completion:nil]; 
} 

ありがとう!

+2

を完璧に良い質問を人々ダウン投票されているのはなぜマイクの許可を扱うために使用する次のコードを持っていますか?問題は明確であり、関連する詳細を提供します。ほかに何が欲しいですか? – rmaddy

答えて

3

コードが正しくありません。ユーザーが既に許可を持っているかどうかを確認します。そうでなければ、許可を求めない。設定ページに移動するためのオプションが表示されます。しかし、あなたのアプリがマイクを使用する許可を絶対に要求しない場合は、[設定]ページにマイク設定はありません。

実際に許可を求めるコードが必要です。次のようにあなたがこれを呼び出すことができます

+ (void)checkMicrophonePermissions:(void (^)(BOOL allowed))completion { 
    AVAudioSessionRecordPermission status = [[AVAudioSession sharedInstance] recordPermission]; 
    switch (status) { 
     case AVAudioSessionRecordPermissionGranted: 
      if (completion) { 
       completion(YES); 
      } 
      break; 
     case AVAudioSessionRecordPermissionDenied: 
     { 
      // Optionally show alert with option to go to Settings 

      if (completion) { 
       completion(NO); 
      } 
     } 
      break; 
     case AVAudioSessionRecordPermissionUndetermined: 
      [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
       if (granted && completion) { 
        dispatch_async(dispatch_get_main_queue(), ^{ 
         completion(granted); 
        }); 
       } 
      }]; 
      break; 
    } 

} 

[whateverUtilClass checkMicrophonePermissions:^(BOOL allowed) { 
    if (allowed) { 
     [self configureMicrophone]; 
    } 
}]; 
+0

それは意味がありますが、なぜ私の電話に表示されますか? –

+0

私が考えることができる唯一のことは、ある時点であなたのアプリが許可を求めて、それがあなたのデバイス上で起動されたということです。 – rmaddy

+0

ああ、それは意味をなさないと思う。ありがとう! –

関連する問題