Ответ 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];
Вам нужно будет сохранить том и сравнить его с предыдущим значением, полученным от уведомления, чтобы узнать, какая кнопка была нажата.
Это решение по-прежнему будет настраивать системный том, когда пользователь нажимает клавишу регулировки громкости, и показывает наложение громкости. Если вы хотите избежать изменения объема системы и отображения оверлея (по сути, полностью переименовать клавиши регулировки громкости), см. Этот ответ