Questa domanda riguarda il codice da questa domanda: Detect headphone button presses in OS XRileva presse hardware cuffie in Mac
La loro risposta è stata segnata corretta, tuttavia, non ho potuto ottenere il loro codice a lavorare (questo può essere a causa della mia mancanza di conoscenza di obiettivo-c). Ho seguito le loro istruzioni e ho modificato tre file. Questo è quello che ho provato (Ho anche guardato la documentazione IOKit di Apple e non sono riuscito a trovare alcuna documentazione pulsante hardware cuffia):
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
... così come modificare una riga in KeyboardPaneController.m (che è stata mostrata nelle istruzioni). A causa della mancanza di documentazione sul framework, è davvero difficile trovare una risposta (il poster è stato offline per più di un anno, quindi presumo che probabilmente non otterrò una risposta). Il codice è stato testato su leone e ho il leone di montagna, quindi potrebbe essere il problema.
So che questo è sicuramente possibile implementare perché iTunes è molto reattivo alle mie pressioni dei pulsanti delle cuffie (che è un po 'una sfumatura). Mi piacerebbe essere in grado di controllare Spotify con i pulsanti delle mie cuffie, piuttosto che con iTunes.
'+ allKeyboards' restituisce' nil' o ha trovato qualcosa? Hai provato a registrare il prodotto del dispositivo nomi per vedere se forse c'è un nome che sembra promettente ma diverso da quello previsto da quel codice? (In generale, è necessario essere più chiari su come questo codice non funziona.) –
So che allKeyboards non ha restituito le cuffie o la scheda audio. Tuttavia, vedrò esattamente cosa restituisce allKeyboards e pubblica i risultati. – alexy13