2011-09-23 8 views
10

Necesito detectar cuando el usuario presiona las teclas de volumen de hardware, (enfoque seguro de App Store) He intentado varias cosas sin suerte. ¿Sabes cómo implementar tal funcionalidad? Actualmente me estoy registrando para recibir notificaciones, sin embargo, parece que no se las llama. Aquí está mi código:iPhone Detect Volume Keys presione.

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

Y el método del receptor es:

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

Cualquier consejo sería muy apreciada.

+0

mira aquí: http://stackoverflow.com/questions/772832/program-access-to-iphone- botones de volumen – mja

Respuesta

4

lo necesario para empezar una sesión de audio antes de la notificación se disparará:

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

Ahora usted puede suscribirse a la notificación:

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

para obtener el volumen:

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

Necesitará almacenar el volumen y compararlo con el valor anterior que recibió de una notificación para saber qué botón se presionó.

Esta solución ajustará el volumen del sistema cuando el usuario presiona la tecla de volumen y muestra la superposición de volumen. Si desea evitar cambiar el volumen del sistema y mostrar la superposición (en esencia reutilizar por completo las teclas de volumen), see this answer