Erkennen, ob ein Hardware-Kopfhörer auf dem Mac gedrückt wird

Diese Frage betrifft den Code dieser Frage:Erkennen Sie, dass die Kopfhörertaste in OS X gedrückt wird

Ihre Antwort wurde als richtig markiert, aber ich konnte ihren Code nicht zum Laufen bringen (dies könnte an meinem mangelnden Wissen über Objective-C liegen). Ich folgte ihren Anweisungen und änderte drei Dateien. Folgendes habe ich ausprobiert (ich habe mir auch die IOKit-Dokumentation von Apple angesehen und konnte keine Dokumentation zu den Hardware-Tasten für Kopfhörer finden):

AwesomeClass.h

#import <Cocoa/Cocoa.h>
#include "KeyboardPaneController.h"

@interface AwesomeClass : KeyboardPaneController
+ (NSArray *) allKeyboards;
- (void) initKeyboardElements: (NSArray *) elements;
- (void) ddhidQueueHasEvents: (DDHidQueue *) hidQueue;
@end

AwesomeClass.m

#import "AwesomeClass.h"
#import "DDHidLib.h"

@implementation AwesomeClass

+ (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];
    }
}
@end

... sowie das Ändern einer Zeile in KeyboardPaneController.m (das wurde in der Anleitung gezeigt). Aufgrund der fehlenden Dokumentation des Frameworks ist es sehr schwierig, eine Antwort zu finden (das Poster ist seit mehr als einem Jahr offline, daher gehe ich davon aus, dass ich wahrscheinlich keine Antwort mehr bekomme). Der Code wurde an Löwen getestet, und ich habe einen Berglöwen.

Ich weiß, dass dies definitiv implementiert werden kann, da iTunes sehr schnell auf meine Kopfhörertasten reagiert (was eine Nuance ist). Ich möchte Spotify lieber über die Tasten meines Kopfhörers als über iTunes steuern können.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage