IPhone Detect Volume Keys нажмите.

Мне нужно определить, когда пользователь нажимает клавиши аппаратного тома (безопасный подход в App Store). Я пробовал несколько вещей без везения. Вы знаете, как реализовать такую ​​функциональность? В настоящее время я регистрируюсь для уведомлений, однако они, похоже, не вызываются. Здесь мой код:

  AudioSessionInitialize(NULL, NULL, NULL, NULL);
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
                       selector:@selector(volumeChanged:) 
                           name:@"AVSystemController_SystemVolumeDidChangeNotification" 
                         object:nil];

И метод приемника:

-(void)volumeChanged:(NSNotification *)notification{
         NSLog(@"YAY, VOLUME WAS CHANGED");}

Любые советы будут очень признательны.

Ответ 1

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

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionSetActive(true); 

Теперь вы можете подписаться на уведомление:

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(volumeChanged:) 
    name:@"AVSystemController_SystemVolumeDidChangeNotification" 
    object:nil];

Чтобы получить объем:

float volume = [[[notification userInfo] 
    objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] 
    floatValue];

Вам нужно будет сохранить том и сравнить его с предыдущим значением, полученным от уведомления, чтобы узнать, какая кнопка была нажата.

Это решение по-прежнему будет настраивать системный том, когда пользователь нажимает клавишу регулировки громкости, и показывает наложение громкости. Если вы хотите избежать изменения объема системы и отображения оверлея (по сути, полностью переименовать клавиши регулировки громкости), см. Этот ответ