2011-09-23 17 views
10

Ho bisogno di rilevare quando l'utente preme i tasti del volume dell'hardware, (approccio sicuro App Store) Ho provato un certo numero di cose senza fortuna. Sai come implementare tale funzionalità? Attualmente sto registrando per le notifiche, tuttavia non sembrano essere chiamate. Ecco il mio codice:iPhone Rileva i tasti del volume premere.

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter addObserver:self 
         selector:@selector(volumeChanged:) 
          name:@"AVSystemController_SystemVolumeDidChangeNotification" 
         object:nil]; 

E il metodo ricevitore è:

-(void)volumeChanged:(NSNotification *)notification{ 
     NSLog(@"YAY, VOLUME WAS CHANGED");} 

Qualche consiglio sarebbe molto apprezzato.

+0

guarda qui: http://stackoverflow.com/questions/772832/program-access-to-iphone- volume-pulsanti – mja

risposta

4

È necessario avviare una sessione audio prima della notifica scatterà:

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionSetActive(true); 

Ora è possibile iscriversi alla notifica:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(volumeChanged:) 
    name:@"AVSystemController_SystemVolumeDidChangeNotification" 
    object:nil]; 

Per ottenere il volume:

float volume = [[[notification userInfo] 
    objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] 
    floatValue]; 

Sarà necessario memorizzare il volume e confrontarlo con il valore precedente ottenuto da un avviso per sapere quale pulsante è stato premuto.

Questa soluzione regolerà ancora il volume del sistema quando l'utente preme il tasto del volume e mostra la sovrapposizione del volume. Se vuoi evitare di cambiare il volume del sistema e mostrare la sovrapposizione (in pratica, completamente riutilizzare i tasti del volume), see this answer

Problemi correlati