2010-11-21 4 views
5

Я разрабатываю приложение для камеры, чтобы щелкнуть фотографию при нажатии кнопки регулировки громкости.Аутентификатор прослушивания аудиозаписей автоматически деактивирован в UIImagePickerController?

Я использовал AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume, audioVolumeChangeListenerCallback, self);, чтобы успешно получить уведомление, когда кнопка громкости нажата до начала моей камеры. Однако после того, как я запустил камеру, этот прослушиватель свойств больше не работает. Это автоматически отключается или что-то еще?

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

ответ

3

Извините, что это то, что не поддерживается в IOS4. Если вам удастся реализовать это успешно, приложение будет отклонено Apple.

Однако на WWDC 2011 было объявлено, что это полностью поддерживается в IO5 и будет работать по умолчанию при использовании UIImagePickerController в любом приложении.

Надеюсь, это поможет.

+0

Поддерживается только в том случае, если вы установили переменную «showCameraControl» в uiimagepickercontroller на YES – Will

1

Даже в приложении камеры по умолчанию на 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.

Смежные вопросы