OS X

2011-10-14 22 views
10

'da bulunan kulaklık düğmesindeki basışları iPhone'unuzda kullandığınız birçok kulaklığın (Apple'ın kendisi de dahil olmak üzere) düğmeleri, mikrofonları veya her ikisi de vardır.OS X

Mac ile güzel çalışıyorlar ve iTunes, düğmeye basmayı doğru bir şekilde algılıyor.

Sorum şu: Bu kakao preslerini kakaoda nasıl tespit edersiniz? Menü çubuğunda yaşayan iTunes'a küçük bir alternatif yazıyorum ve sadece klavyenin medya anahtarlarını değil, kulaklık düğmelerine de yanıt vermek istiyorum.

Yanıtlarınız için teşekkür ederiz!

+0

Medya anahtarlarına yönelik desteğinizi henüz uygulamaya koydunuz mu? Bunu yapmak, kulaklık kontrollerini ücretsiz olarak destekleyebilir. (Bunu denemedim.) –

+0

Medya anahtar desteğini zaten uygulamıştım - ne yazık ki bana ücretsiz kulaklık desteği vermiyor gibi görünüyor. iTunes, kulaklık düğmesine yine de yanıt veriyor, ancak uygulamam çalışmıyor. –

+0

bu işe yaramıyor - bkz. Http://stackoverflow.com/questions/15398237/detect-hardware-headphone-presses-in-mac –

cevap

2

DDHidLib'e http://code.google.com/p/ddribin/ adresinden göz atın. Hızlı bir test için DDHidKeyboard alt sınıfını ve aşağıdaki 3 yöntemi geçersiz kılabilirsiniz. Ardından, sağlanan HIDDeviceTest hedefinin KeyboardPaneController.m - (void) awakeFromNib;'da, NSArray * keyboards = [DDHidKeyboard allKeyboards];'u NSArray * keyboards = [<YourSubclass> allKeyboards]; ile değiştirin veya alt sınıfınızı ne adlandırdıysanız ekleyin. Şimdi HIDDeviceTest hedefini çalıştırdığınızda, "Klavyeler" sekmesi altında listelenen "Apple Mikey HID Sürücüsü" ni görmelisiniz. Şansınızla, girişi kulaklık uzaktan kumanda düğmelerinden göreceksiniz. Orta düğmeye iki kez dokunup üç kez dokunmayı deneyin ve her birinin farklı bir etkinlik türü olduğunu göreceksiniz. Ben sadece bu bir Orta 2011 13 "Macbook hava çalışan Lion 10.7.3 yanı sıra bir Mid 2010 17" Macbook Pro SL 10.6.8 çalışan test ettik.

#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

Bu kodla gerçekten ilgileniyorum (Çözüm aradım) şimdi saatlerce) ama neredeyse işe yarayabilir ama oldukça değil. Başka bir sınıfı alt sınıflara ayırdım ve talimatları izledim ancak Apple Mikey HID Sürücüsü görünmüyor. Çalışmamasına neden olan alt sınıf bilgisi eksikliğim olabilir. Bunun tam bir örneği var mı? – alexy13

+1

bu işe yaramıyor. http://stackoverflow.com/questions/15398237/detect-hardware-headphone-presses-in-mac sayfasına bakın. –