2011-09-15 19 views
6

Czy istnieje sposób wykrywania przycisku odtwarzania/wstrzymania zestawu słuchawkowego?Przycisk wykrywania zestawu słuchawkowego kliknij iPhone SDK

udało mi się wykryć za pomocą przycisków głośności kliknięcia:

AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume , audioVolumeChangeListenerCallback, self); 

Ale nie mogę znaleźć AudioSessionProperty dla przycisku środkowego. Jak to zrobić?

Odpowiedz

5

Wszystko, co zostało zrobione spoza aplikacji, jest uważane za "zdarzenie zdalne". Po dwukrotnym dotknięciu przycisku strony głównej i naciśnięciu przycisku Odtwórz/Wstrzymaj, jest to odpowiednik naciśnięcia przycisku odtwarzania/wstrzymania na zestawie słuchawkowym (to samo dotyczy podwójnego stuknięcia w celu następnego i potrójnego stuknięcia w przypadku poprzedniego).

Oto przewodnik na temat event handling of remote events for iOS.

Osobiście lubię instacji MainWindow (UIWindow) i przesłanianie metody sendEvent:, więc mogę zarządzać bardziej bezpośrednio:

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

nadzieję, że pomoże, enum na razie przycisku centralnego jest UIEventSubtypeRemoteControlTogglePlayPause .

+0

Dzięki Can. Znalazłem inne rozwiązanie przy użyciu metody: "remoteControlReceivedWithEvent:". Rozwiązanie jest omawiane tutaj: http://www.iphonedevsdk.com/forum/iphone-sdk-development/44433-there-way-respond-clicks-headphone-buttons.html – MCO

+0

@ Can Próbowałem twoje rozwiązanie i Typ zdarzenia sendEvent UIEventTypeRemoteControl nie jest wywoływany, gdy naciskam przyciski na moim zestawie słuchawkowym. Czy jest jeszcze jakiś inny sposób konfiguracji, aby to zadziałało? Podklasa działa tak jak ja łapię inne zdarzenia. –

0

Odpowiedź Can'a była dobra, ale uważam, że jest nieaktualna.

Teraz potrzebujesz podklasy UIApplication.

kod 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])); 
    } 
} 

kodeksu 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 

kodeksu AppDelegate.m:

wewnątrz - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

rozmowy [application beginReceivingRemoteControlEvents];

Powiązane problemy