Обнаружение нажатия кнопки гарнитуры на iPhone SDK - PullRequest
8 голосов
/ 15 сентября 2011

Есть ли способ обнаружить нажатие кнопки воспроизведения / паузы в гарнитуре?

Мне удалось обнаружить нажатия кнопок громкости, используя:

AudioSessionAddPropertyListener( kAudioSessionProperty_CurrentHardwareOutputVolume , audioVolumeChangeListenerCallback, self );

Но я не могу найти AudioSessionPropertyдля центральной кнопки.Как это сделать?

Ответы [ 2 ]

7 голосов
/ 18 сентября 2011

Все, что делается вне вашего приложения, считается «удаленным событием». Если дважды нажать кнопку «Домой» и нажать там кнопку «Воспроизведение / Пауза», это эквивалентно нажатию кнопки «Воспроизведение / пауза» на гарнитуре (то же самое для двойного нажатия для следующего и тройного для предыдущего).

Вот руководство по обработке событий удаленных событий для iOS .

Лично мне нравится создавать подклассы MainWindow (UIWindow) и переопределять метод sendEvent:, поэтому я могу управлять им более напрямую:

- (void)sendEvent:(UIEvent *)event
{
    if (event.type == UIEventTypeRemoteControl)
    {
        // Do stuff here
    }
    else
    {
        // Not my problem.
        [super sendEvent:event];
    }
}

Надеюсь, это поможет, перечисление для события центральной кнопки - UIEventSubtypeRemoteControlTogglePlayPause.

0 голосов
/ 18 октября 2017

Может ответ Джан был хорошим, но я думаю, что он устарел.

Теперь вам нужно создать подкласс UIApplication.

код для main.m

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "MyUIApplication.h"

int main(int argc, char * argv[]) {
  @autoreleasepool {
    return UIApplicationMain(
      argc,
      argv,
      NSStringFromClass([MyUIApplication class]),
      NSStringFromClass([AppDelegate class]));
  }
}

Код для MyUIApplication.m:

@implementation MyUIApplication
- (void)sendEvent:(UIEvent *)event {
  if (event.type == UIEventTypeRemoteControl) {
    // Check event.subtype to see if it's a single click, double click, etc.
  } else {
    // Not my problem.
    [super sendEvent:event];
  }
}
@end

Код для AppDelegate.m:

внутри - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

звоните [application beginReceivingRemoteControlEvents];

...