2015-10-11 8 views
6

Quindi il fatto è che ho bisogno di chiamare qualche funzione dopo che l'utente ha dato (o declina) il permesso di usare il microfono.Come rilevare l'autorizzazione del microfono per l'utente su iOS?

ho già visto questo:

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

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

Tuttavia, questo funziona solo per rilevare lo stato attuale.

Se lo stato corrente è "no" e il popup appare e l'utente concede l'autorizzazione, la funzione non verrà chiamata. Questo perché, nel momento dell'esecuzione, il permesso era "no" e fino a quando non eseguiremo il codice la prossima volta non verrà chiamata la funzione.

Quello che voglio fare è chiamare una funzione dopo che l'utente ha premuto "consenti" o "rifiuta".

Qualcuno sa come fare?

MODIFICA: Dimenticato di menzionare che deve essere la soluzione compatibile iOS 7.0 up.

+1

Non credo che si può rilevare la selezione dei permessi registrazione automatica, tuttavia, è possibile creare un timer che controlla se l'applicazione dispone di autorizzazioni ogni 1 circa o giù di lì, e se lo fa, il timer si interrompe e l'app esegue il suo scopo come previsto. – vaid

+0

anche questo è vero – veich

risposta

11

Un metodo di AVAudioSession introdotto in iOS 8 è recordPermission. Ciò restituisce un enum denominato AVAudioSessionRecordPermission. È possibile utilizzare un interruttore per determinare se l'avviso di autorizzazione è stato presentato all'utente o meno. In questo modo si chiama solo requestRecordPermission quando non è stato presentato all'utente, quindi il blocco permesso può presumere che venga eseguito dopo che l'utente ha consentito o negato l'autorizzazione per la prima volta.

Un esempio potrebbe essere qualcosa di simile -

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

Sembra una buona risposta ma ho dimenticato di menzionare che ho bisogno della soluzione compatibile con iOS 7.0. Vado a votare la soluzione per lo sforzo. – veich

+1

Vedo ... poiché l'avviso di autorizzazione viene presentato all'utente solo una volta, forse è consigliabile scrivere una sorta di flag su NSUserDefaults dopo aver chiamato requestRecordPermission. Ma controlla la flag prima di chiamare e se non è presente, saprai che è stata chiamata per la prima volta e quindi puoi fare un'ipotesi simile nel blocco di autorizzazione come risposta. – Bamsworld

0

Se l'uso non ha ancora dato il vostro consenso, effettuare le seguenti operazioni:

  1. In primo luogo, mostrare il dialogo pop-up
  2. Eseguire il codice in OP

-

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

Penso che OP significhi che lui/lei vuole catturare la richiesta di registrazione automatica che iOS si apre per te quando stai provando ad accedere al microfono. – vaid

+0

Non ho idea di cosa sia OP né da dove deve essere eseguito questo codice. Provato ad aggiungerlo e il codice viene eseguito subito, quindi non c'è modo di acquisire la risposta dell'utente – veich

+1

OP significa "poster originale". Il codice può essere inserito all'interno di un metodo. Quando viene chiamato il metodo, questo codice viene eseguito. – vaid

Problemi correlati