Даже в приложении камеры по умолчанию на iphone увеличение / уменьшение громкости не поддерживается.Может быть, они блокируют ввод с этих кнопок, когда камера включена.То, что они не блокируют, является тихим выключателем.Я добавил это уведомление, и мой обратный вызов был вызван даже при включенной камере:
AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(true);
AudioSessionAddPropertyListener(
kAudioSessionProperty_AudioRouteChange,
applicationAudioRouteDidChange,
self);
Проблема, которую необходимо решить, заключается в том, что метод applicationAudioRouteDidChange также будет вызываться, если кто-то вставит наушники.Вы можете проверить это, как сказано в AudioSessionProgrammingGuide :
Когда система вызывает обратный вызов с изменением маршрута, она предоставляет информацию, необходимую для выяснения, какое действие предпринять.Основывайте свой обратный вызов на прототипе AudioSessionPropertyListener из служб аудиосеансов, как показано здесь:
void MyPropertyListener (void * inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void * inData);
Для события изменения маршрута система отправляет kAudioSessionProperty_AudioRouteChange в параметре inID.
Параметр inData, отправляемый вашему обратному вызову, содержит объект CFDictionaryRef, который описывает:
Почемумаршрут изменился. То, что предыдущий маршрут был
Я сделал это, и он делает снимок, когда тихий переключатель переключается на мммм:
void applicationAudioRouteDidChange(void *inClientData,
AudioSessionPropertyID inID,
UInt32 inDataSize, const void *inData)
{
if ([[(NSDictionary*)inData objectForKey:@"OutputDeviceDidChange_Reason"] intValue] == 5) {
[((RootViewController*)inClientData).picker takePicture];
}
// Do something like reset the system
}
Как упомянул Том, функциональность, которую вы пытаетесьреализовать будет частью iOS 5.