iOS Обнаружение изменения уровня громкости системы. частный API или нет? AVSystemController_SystemVolumeDidChangeNotification

Можно ли рассматривать AVSystemController_SystemVolumeDidChangeNotification NSNotification (в процессе проверки в App Store) как использование частного API?

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

Я искал решение, как получить уведомление или событие нажатия кнопки аппаратной громкости, и нашел ряд решений.

Например, iPhone «Обнаружение клавиш громкости» нажмите.

а также

Как получить уровень громкости звука , а уведомления об изменении громкости на iOS?

Мне нравится решение с прослушиванием NSNotificationCenter, и кажется, что самое простое и понятное решение - слушать AVSystemController_SystemVolumeDidChangeNotification (и он отлично работает)

Но есть одна важная вещь, о которой я хочу знать наверняка.

Это имя уведомления не появляется ни в какой официальной документации Apple, и ведутся дискуссии о том, будет ли это использование уведомления рассматриваться как «Использование частного API» или нет.

Насколько я понимаю, использование частного API связано с вызовом частных методов. Вот почему использование этого ключа уведомления не может рассматриваться как использование частного API (потому что на самом деле мы используем имя уведомления как NSString).

Может быть, кто-то знает это наверняка или имеет опыт использования AVSystemController_SystemVolumeDidChangeNotification и приложение было отправлено / отклонено?

Большое спасибо за любую информацию!


person Alexander Tkachenko    schedule 14.08.2014    source источник
comment
Если вам нужно задокументированное решение, почему бы не попробовать наблюдение за ключом в аудиосеансе свойство outputVolume? Пример показан здесь.   -  person Nate    schedule 15.08.2014
comment
Вау, отлично! Большое спасибо, Нейт! Отлично работает в iOS 7, и я предлагаю это сделать и в iOS 6.   -  person Alexander Tkachenko    schedule 15.08.2014
comment
да, можно. И мое приложение теперь в AppStore.   -  person Z Bourbon    schedule 13.04.2016
comment
@Nate Это работает только в том случае, если выходная громкость не на максимальном / минимальном уровне. Если это так, выходной объем никогда не изменяется, и поэтому наблюдение никогда не происходит.   -  person Stephen Paul    schedule 16.05.2016
comment
@StephenPaul, если вы используете KVO, вы просто читаете свойство непосредственно при запуске вашего приложения. После этого KVO будет держать вас в курсе изменений.   -  person Nate    schedule 16.05.2016
comment
@Nate Ты совершенно не соответствовал моей точке зрения. Я знаю, что KVO информирует вас об изменениях. Но проблема в том, что он держит вас в курсе ИЗМЕНЕНИЙ. Если выходная громкость никогда не изменяется, например, если она равна 0, и вы пытаетесь уменьшить громкость, выходная громкость никогда не изменяется, и вы никогда не получите это сообщение.   -  person Stephen Paul    schedule 19.05.2016
comment
@StephenPaul, заголовок вопроса: "Обнаружить изменение уровня громкости системы". Он уточняет, что это для отображения уровня громкости. Таким образом, если он не изменится, ему не потребуется уведомление. Ваша точка зрения не была упущена. Это был плохой момент.   -  person Nate    schedule 19.05.2016
comment
Привет, ребята, у меня получилось решение @ Nate, я просто читаю значение свойства outputVolume AudioSession, если мне нужно значение, и KVObserving его, когда мне нужно уведомление об изменении этого свойства. Отлично работает для отображения текущего уровня громкости системы в моем пользовательском интерфейсе. Мой последний код: gist.github.com/tkach/f5403fa82d222a62379d6c6e4ad705ad705   -  person Alexander Tkachenko    schedule 19.05.2016
comment
@Nate Это плохой момент, по мнению кого? Это зависит от того, кого вы спрашиваете. OP ссылался на поток переполнения стека, который имел дело с обнаружением клавиш громкости. Как то, что я сказал, не имеет к этому отношения? Кроме того, я не возражал с вашим подходом, поскольку на самом деле это предпочтительный подход Apple, я просто объяснял ситуацию, с которой я сам недавно столкнулся с этой реализацией, о которой другие могут не знать. Я уверен, что другие читатели извлекут пользу из этого единственного мнения.   -  person Stephen Paul    schedule 22.05.2016


Ответы (1)


Я знаю, что в комментариях упоминался альтернативный метод с использованием KVO. Ограничения этого метода также обсуждаются в комментариях. Первоначальный вопрос касался опыта использования NSNotificationCenter и AVSystemController_SystemVolumeDidChangeNotification. Я использовал этот метод в своем приложении, и он не был отклонен. Он доступен в App Store.

person adamfowlerphoto    schedule 03.12.2018