2011-09-15 94 views
6

有沒有辦法檢測耳機的播放/暫停按鈕點擊?檢測耳機按鈕點擊iPhone SDK

我設法檢測音量按鈕點擊使用:

AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume , audioVolumeChangeListenerCallback, self); 

但我不能找到中間的按鍵的AudioSessionProperty。有什麼辦法做到這一點?

回答

5

從您的應用以外完成的所有事情都被視爲「遠程事件」。如果您雙擊主頁按鈕並按下播放/暫停按鈕,則相當於按下耳機上的播放/暫停按鈕(對於下一個雙擊和前一個三拍)。

以下是關於event handling of remote events for iOS的指南。

就個人而言,我喜歡繼承的主窗口(UIWindow)和重寫sendEvent:方法,這樣我就可以更直接地管理它:

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

希望幫助,枚舉的中央按鈕的事件是UIEventSubtypeRemoteControlTogglePlayPause

+0

謝謝可以。我通過使用方法找到了另一個解決方案:「remoteControlReceivedWithEvent:」。解決方法在這裏討論:http://www.iphonedevsdk.com/forum/iphone-sdk-development/44433-there-way-respond-clicks-headphone-buttons.html – MCO

+0

@我可以試試你的解決方案和當我按下耳機上的按鈕時,不會調用sendEvent UIEventTypeRemoteControl事件類型。是否還有其他一些設置可以幫助你實現這個目標?這個子類正在工作,因爲我確實發現了一些其他事件。 –

0

Can的答案很好,但我認爲它已經過時了。

現在您需要繼承UIApplication。

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

代碼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 

代碼AppDelegate.m:中

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

通話[application beginReceivingRemoteControlEvents];