Можете ли вы запускать функции на iPhone, когда пользователь регулирует громкость звонка? - PullRequest
1 голос
/ 10 ноября 2009

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

Возможно ли это? Могу ли я вызвать функцию, когда пользователь изменяет громкость, и могу ли я затем программно активировать камеру в этой функции?

Очень хотелось бы получить ссылку или фрагмент кода.

Ответы [ 3 ]

8 голосов
/ 10 ноября 2009

Я второй комментарии Фрэнка Крюгера и WKW. С точки зрения пользовательского опыта это звучит как очень плохая идея. Если вы все равно хотите попробовать, вы можете попробовать это:

MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
[musicPlayer beginGeneratingPlaybackNotifications];

Теперь система будет генерировать MPMusicPlayerControllerVolumeDidChangeNotification при каждом изменении громкости. Вы можете зарегистрироваться в качестве наблюдателя для уведомления с помощью -[NSNotificationCenter addObserver:selector:name:object:]. Это напрямую не связано с кнопками регулировки громкости. Например, также возможно, что пользователь вставил или снял наушники, а ОС отрегулировала громкость в соответствии с последним параметром для этой конфигурации).

Кроме того, я считаю, что уведомление о громкости предназначено только для изменений громкости музыки, а не громкости системы / звонка. Так что это будет опубликовано только когда играет музыка. Но я не уверен в этом.

0 голосов
/ 24 октября 2011

Интересно, насколько это плохая идея, пока Apple ее не реализует. Получает ли Эндрю какую-либо компенсацию от Apple за то, что она выдвинула эту идею перед ними?

0 голосов
/ 10 ноября 2009

Для получения уведомлений об изменении громкости вы можете определить функцию обратного вызова:

    void listenerCallback (void *inUserData, 
                           AudioSessionPropertyID inPropertyID, 
                           UInt32 inPropertyValueSize, 
                           const void *inPropertyValue)

, а затем зарегистрируйте его с помощью:

AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume,            
                                propertyListenerCallback, 
                                userData);                               

Это, конечно, предполагает, что вы инициализируете AudioSession вашего приложения до этого.

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

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