2014-06-20 11 views
7

Sto provando a scrivere una rapida app iOS che registrerà la voce dell'utente. Ho scritto il seguente codice in modo rapido, ma non riesce a richiedere permessi mic all'utente. Stampa concesso ma non registra mai l'audio e nel riquadro delle impostazioni in Privacy non elenca l'app. Come posso richiedere i permessi di registrazione in swift?AVAudioSession Swift

var session: AVAudioSession = AVAudioSession.sharedInstance() 
session.requestRecordPermission({(granted: Bool)-> Void in 
    if granted { 
      println(" granted") 
      session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil) 
      session.setActive(true, error: nil) 
      self.recorder.record() 
    }else{ 
      println("not granted") 
    } 
}) 

risposta

11

Dal momento che iOS 7 è necessario verificare se risponde al selettore requestRecordPermission:

Ho controllato questo codice utilizzando un iPhone 5S con iOS 8 Beta e funziona perfettamente. Una volta concesso il permesso, il sistema non lo chiederà più.

Vale la pena notare che non ha richiesto il permesso quando si utilizza il simulatore .

Questo è il codice che ho provato e funziona:

if (session.respondsToSelector("requestRecordPermission:")) { 
    AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in 
     if granted { 
      println("granted") 
      session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil) 
      session.setActive(true, error: nil) 
      self.recorder() 
     } else{ 
      println("not granted") 
     } 
    }) 

} 
+0

ho controllato nella linea davanti alla quale non ho postato e non ha funzionato ... Probabilmente perché stavo usando il simulatore. Ho provato a caricare sul mio dispositivo, ma c'è un bug in cui si dice che non è supportato (molti radar sono già stati archiviati da altri). Grazie per i test sul tuo dispositivo. – BDGapps

+0

Nessun problema, prego! – Winston

1

Per Swift 3:

let session = AVAudioSession.sharedInstance() 
    if (session.responds(to: #selector(AVAudioSession.requestRecordPermission(_:)))) { 
     AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in 
      if granted { 
       Linphone.manager.callUser(username: username) 

       print("granted") 

       do { 
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
        try session.setActive(true) 
       } 
       catch { 

        print("Couldn't set Audio session category") 
       } 
      } else{ 
       print("not granted") 
      } 
     }) 
    }