這個問題是關於這個問題的代碼:Detect headphone button presses in OS X檢測硬件耳機機在Mac
他們的答案被標記爲正確,但我不能讓他們的代碼工作(這可能是因爲我的知識缺乏的目標c)。我遵循他們的指示,並修改了三個文件。這是我曾嘗試(我也看着蘋果由於IOKit文件,但沒有找到任何耳機硬件按鈕文檔):
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
...以及在KeyboardPaneController.m中修改一行(在說明中顯示)。由於缺乏框架文檔,很難找到答案(海報已經脫機一年多了,所以我假設我可能不會得到迴應)。代碼在獅子身上進行了測試,我有山獅,所以這可能是問題。
我知道這是絕對有可能實現的,因爲iTunes對我的耳機按鍵(這有點微妙)非常敏感。我希望能夠使用耳機上的按鈕而不是iTunes來控制Spotify。
'+ allKeyboards'返回'nil'還是找到了某些內容?名稱,看看是否有一個看起來很有前途的名字,但與該代碼預期的名稱不同?(通常,您需要更清楚地瞭解該代碼的失敗原因)。 – 2013-03-16 21:52:45
我知道所有鍵盤都沒有返回耳機或聲卡,但我會看到正是allKeyboards返回併發布結果。 – alexy13 2013-03-16 22:53:02