2011-10-14 20 views
10

में हेडफ़ोन बटन प्रेस का पता लगाएं आपके द्वारा अपने आईफोन (ऐप्पल सहित) में उपयोग किए जाने वाले कई हेडफ़ोन या तो बटन, माइक्रोफ़ोन या दोनों होते हैं।ओएस एक्स

वे मैक के साथ अच्छी तरह से काम करते हैं, और आईट्यून्स बटन प्रेस को सही ढंग से पहचानता है।

मेरा सवाल यह है - आप कोको में इन बटन प्रेस का पता कैसे लगाएंगे? मैं आईट्यून्स के लिए एक छोटा सा विकल्प लिख रहा हूं जो आपके मेन्यू बार में रहता है, और मैं हेडसेट बटन का जवाब देना चाहता हूं, न केवल कीबोर्ड की मीडिया कुंजी।

किसी भी प्रतिक्रिया के लिए धन्यवाद!

+0

क्या आपने अभी तक मीडिया कुंजी के लिए अपना समर्थन लागू किया है? ऐसा करने से आपको हेडफ़ोन नियंत्रणों के लिए मुफ्त में सहायता मिल सकती है। (मैंने यह कोशिश नहीं की है।) –

+0

मैंने पहले से ही मीडिया कुंजी समर्थन लागू किया - दुख की बात यह है कि मुझे मुफ्त हेडफ़ोन समर्थन नहीं लगता है। आईट्यून्स अभी भी हेडफ़ोन बटन का जवाब देता है, जबकि मेरा ऐप नहीं करता है। –

+0

यह काम नहीं करता है - देखें http://stackoverflow.com/questions/15398237/detect-hardware-headphone-presses-in-mac –

उत्तर

2

http://code.google.com/p/ddribin/ पर डीडीएचआईडीएलबी देखें। एक त्वरित परीक्षण के लिए, आप डीडीएचडकेबोर्ड को उपclass कर सकते हैं और 3 निम्नलिखित विधियों को ओवरराइड कर सकते हैं। फिर, प्रदान किए गए HIDDeviceTest लक्ष्य के KeyboardPaneController.m - (void) awakeFromNib; में, NSArray * keyboards = [DDHidKeyboard allKeyboards];NSArray * keyboards = [<YourSubclass> allKeyboards]; या जो भी आपने अपना सबक्लास नाम दिया है उसे प्रतिस्थापित करें। अब जब आप HIDDeviceTest लक्ष्य चलाते हैं, तो आपको "कीबोर्ड" टैब के नीचे सूचीबद्ध "Apple Mikey HID Driver" दिखाई देना चाहिए। भाग्य के साथ, आप हेडसेट रिमोट बटन दबाकर इनपुट देखेंगे। डबल टैपिंग और ट्रिपल मध्य बटन को टैप करने का प्रयास करें और आप देखेंगे कि प्रत्येक एक अलग घटना प्रकार है। मैंने केवल मिड 2011 13 "मैकबुक एयर शेर 10.7.3 के साथ-साथ मिड 2010 17" मैकबुक प्रो चल रहा है SL 10.6.8 पर इसका परीक्षण किया है।

#import "DDHidLib.h" 

@implementation <YourSubclass> 

+ (NSArray *) allKeyboards; 
{ 
    NSArray *array = [DDHidDevice allDevicesMatchingUsagePage: kHIDPage_Consumer 
                 usageId: kHIDUsage_GD_Pointer 
                withClass: self 
              skipZeroLocations: NO]; 

    //Only return "Apple Mikey HID Driver", if not found, return nil. 
    for (DDHidDevice *device in array) { 
     if ([[device productName] isEqualToString:@"Apple Mikey HID Driver"]) { 
      return [NSArray arrayWithObject:device]; 
     } 
    } 
    return nil; 
} 

- (void) initKeyboardElements: (NSArray *) elements; 
{ 
    NSEnumerator * e = [elements objectEnumerator]; 
    DDHidElement * element; 
    while (element = [e nextObject]) 
    { 
     unsigned usagePage = [[element usage] usagePage]; 
     unsigned usageId = [[element usage] usageId]; 
     if (usagePage == kHIDPage_GenericDesktop) 
     { 
      if ((usageId >= 0x89) && (usageId <= 0x8D)) 
      { 
       [mKeyElements addObject: element]; 
      } 
     } 
     NSArray * subElements = [element elements]; 
     if (subElements != nil) 
      [self initKeyboardElements: subElements]; 
    } 
} 

- (void) ddhidQueueHasEvents: (DDHidQueue *) hidQueue; 
{ 
    DDHidEvent * event; 
    while ((event = [hidQueue nextEvent])) 
    { 
     DDHidElement * element = [self elementForCookie: [event elementCookie]]; 
     unsigned usageId = [[element usage] usageId]; 
     SInt32 value = [event value]; 
     if (value == 1) 
      [self ddhidKeyboard: self keyDown: usageId]; 
    } 
} 
+0

मैं वास्तव में इस कोड से चिंतित हूं (मैं समाधान ढूंढ रहा हूं घंटों के लिए) लेकिन मैं इसे लगभग काम करने के लिए मिल सकता है लेकिन काफी नहीं। मैंने एक और वर्ग को उपclassed और निर्देशों का पालन किया लेकिन ऐप्पल Mikey छुपा चालक दिखाई नहीं देता है। यह ज्ञान के उप-वर्ग की कमी हो सकती है जो इसे काम नहीं कर रही है। क्या इसका पूरा उदाहरण है? – alexy13

+1

यह काम नहीं करता है। http://stackoverflow.com/questions/15398237/detect-hardware-headphone-presses-in-mac देखें –