Даже в приложении камеры по умолчанию на iphone включение/выключение громкости не поддерживается. Может быть, они блокируют ввод с этих кнопок, когда камера включена. То, что они не блокируют, - это бесшумный переключатель. Я добавил это уведомление и мой обратный вызов был вызван даже с камерой на:
AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(true);
AudioSessionAddPropertyListener(
kAudioSessionProperty_AudioRouteChange,
applicationAudioRouteDidChange,
self);
Проблема вам нужно решить, что метод в «applicationAudioRouteDidChange» также будет вызываться, если кто-то вставляет наушники. Вы можете проверить это, как сказано в AudioSessionProgrammingGuide:
Когда система вызывает маршрутный изменения обратного вызова, он обеспечивает информацию, необходимую, чтобы выяснить, какие действия предпринять. Строите свой обратный вызов на прототипе AudioSessionPropertyListener из аудио сессии услуг, как показано здесь:
недействительного MyPropertyListener (пустота * inClientData, AudioSessionPropertyID ИНИД, UInt32 inDataSize, сопзИте пустоту * входные данные,);
Для события изменения маршрута система отправляет параметр kAudioSessionProperty_AudioRouteChange в параметре inID .
параметра
входных данных, отправлен на ваш обратный вызов содержит 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
}
Как отметил Том, функциональность вы пытаетесь реализовать будет частью прошивки 5.
Поддерживается только в том случае, если вы установили переменную «showCameraControl» в uiimagepickercontroller на YES – Will