【问题标题】:how to check NSMicrophoneUsageDescription programmatically如何以编程方式检查 NSMicrophoneUsageDescription
【发布时间】:2017-05-24 11:39:17
【问题描述】:

我希望用户在应用程序中使用麦克风,并将适当的密钥添加到 info.plist “Privacy-MicrophoneUsageDescription”, 如果用户点击麦克风按钮,则会出现带有使用权限问题的窗口。如果用户点击“允许”,则该应用程序可以正常运行而不会出现任何问题。但如果没有,再按一下麦克风按钮,应用就会崩溃。

我想要的是,每次按下按钮时检查 NSMicrophoneUsageDescription 状态。如果被拒绝,请再次向用户请求权限。

【问题讨论】:

    标签: ios swift3 microphone privacy-policy


    【解决方案1】:

    选择的答案不起作用,requestRecordPermission 方法是异步的,它不会在返回语句中返回值之前更改 permissionCheck 的值,正确的处理方法是使用完成处理程序

    func askMicroPhonePermission(completion: @escaping (_ success: Bool)-> Void) {
        switch AVAudioSession.sharedInstance().recordPermission() {
        case AVAudioSessionRecordPermission.granted:
            completion(true)
        case AVAudioSessionRecordPermission.denied:
            completion(false) //show alert if required
        case AVAudioSessionRecordPermission.undetermined:
            AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
                if granted {
                    completion(true)
                } else {
                    completion(false) // show alert if required
                }
            })
        default:
            completion(false)
        }
    }
    

    我修改了选择的答案以包含一个完成处理程序,而不是它有一个返回语句

    【讨论】:

      【解决方案2】:

      对于 Swift 3:

      func askMicroPhonePermission() {
          switch AVAudioSession.sharedInstance().recordPermission() {
          case AVAudioSessionRecordPermission.granted:
              //permissionCheck = true 
          case AVAudioSessionRecordPermission.denied:
             // permissionCheck = false //show alert if required
          case AVAudioSessionRecordPermission.undetermined:
              AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
                  if granted {
                      //permissionCheck = true
                  } else {
                      //permissionCheck = false // show alert if required or completion handler
                  }
              })
          default:
              break
          }
      }
      

      【讨论】:

      • 太好了,我一直在寻找 NSMicrophoneUsageDescription 类,谢谢 :)
      • requestRecordPermission 方法是异步的,因此不能在return 语句之前更改permissionCheck 的值。您应该使用完成处理程序而不是 Bool 返回值
      • 同意,我们应该在这里使用完成处理程序。
      猜你喜欢
      • 2011-12-06
      • 2012-06-14
      • 2012-03-10
      • 2012-08-28
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多