2011-09-15 10 views
6

¿Hay alguna manera de detectar el clic de reproducción/pausa del auricular?Botón Detectar auricular, haga clic en SDK de iPhone

que lograron detectar los botones de volumen clics usando:

AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume , audioVolumeChangeListenerCallback, self); 

pero no puedo encontrar una AudioSessionProperty para el botón central. ¿Cuál es la manera de hacer eso?

Respuesta

5

Todo lo que se hace desde fuera de su aplicación se considera un "Evento remoto". Si toca dos veces el botón de Inicio y presiona Reproducir/Pausar allí, es lo mismo que presionar el botón Reproducir/Pausa en el auricular (Lo mismo para hacer doble toque para el siguiente y tocar tres veces para el anterior).

Aquí está la guía en event handling of remote events for iOS.

Personalmente, me gusta la subclasificación de la MainWindow (UIWindow) y reemplazando el método sendEvent:, por lo que se puede gestionar de forma más directa:

- (void)sendEvent:(UIEvent *)event 
{ 
    if (event.type == UIEventTypeRemoteControl) 
    { 
     // Do stuff here 
    } 
    else 
    { 
     // Not my problem. 
     [super sendEvent:event]; 
    } 
} 

Espero que ayude, la enumeración para el evento del botón central es UIEventSubtypeRemoteControlTogglePlayPause .

+0

Gracias Can. Encontré otra solución usando el método: "remoteControlReceivedWithEvent:". La solución se trata aquí: http://www.iphonedevsdk.com/forum/iphone-sdk-development/44433-there-way-respond-clicks-headphone-buttons.html – MCO

+0

@Puede haber probado su solución y la El tipo de evento sendEvent UIEventTypeRemoteControl no se llama cuando presiono los botones de mis auriculares. ¿Hay alguna otra configuración que hayas hecho para que esto funcione? La subclase está funcionando ya que capto algunos otros eventos. –

0

La respuesta de Can fue buena, pero creo que está desactualizada.

Ahora necesita subclase UIApplication.

código para main.m

#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 
#import "MyUIApplication.h" 

int main(int argc, char * argv[]) { 
    @autoreleasepool { 
    return UIApplicationMain(
     argc, 
     argv, 
     NSStringFromClass([MyUIApplication class]), 
     NSStringFromClass([AppDelegate class])); 
    } 
} 

Código de MyUIApplication.m:

@implementation MyUIApplication 
- (void)sendEvent:(UIEvent *)event { 
    if (event.type == UIEventTypeRemoteControl) { 
    // Check event.subtype to see if it's a single click, double click, etc. 
    } else { 
    // Not my problem. 
    [super sendEvent:event]; 
    } 
} 
@end 

Código de AppDelegate.m:

interior de - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

llamada [application beginReceivingRemoteControlEvents];

Cuestiones relacionadas