ios6 - porque - Grabación de audio Interrumpir iOS 6 Error
grabar pantalla iphone con sonido interno (1)
Me encontré con el mismo problema y encontré una solución.
Utilizando el marco central de telefonía para detectar la llamada entrante, detengo la grabación "desvergonzadamente" cerrando el archivo, sin tocar las colas de audio. Luego, cuando la aplicación se reanuda, muestro la grabación en estado de pausa y el usuario puede reanudar la grabación. Mientras tanto, reinicié todas las colas de audio de mi núcleo.
Tenga cuidado con callEventHandler
de CTCallCenter
si está usando ARC. No se ha lanzado correctamente, así que recuerde configurarlo en nil
.
El proyecto de demostración de Apple, aurioTouch2, demuestra el mismo problema de iOS-6 que tengo al manejar interrupciones de audio cuando estoy en modo de grabación.
El escenario es muy específico. Cuando se encuentra en un modo de grabación de audio, se realiza una llamada telefónica y luego se responde (la declinación de la llamada no causa el error). Luego, después de colgar, la aplicación vuelve a enfocar y no puede seguir grabando.
El mensaje de error es: Error de AUIOClient_StartIO (2003329396) Este código de error se traduce amablemente a la palabra "qué".
El proyecto aurioTouch2 fue una actualización para iOS-5, pero no funciona para iOS-6. Parece un error bastante crítico para mi aplicación, ya que el dispositivo es un "teléfono".
He intentado todas las variaciones sensatas sin suerte. ¿Alguien se encuentra con el mismo problema? Muchas gracias.
Editar: Aquí está el código que lo arregló para mí. La solución se nota en los comentarios. No es exactamente elegante, pero tomaré cualquier cosa en este momento.
Este método se llama en algún momento después de que la aplicación ha vuelto a un estado activo. Tengo el disparador de interrupción establecer una bandera, y luego, cuando las cosas vuelven a estar activas, reviso la bandera y luego llamo a este método aquí.
-(void) handleEndInterruption {
// Reset audio session
UInt32 category = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty ( kAudioSessionProperty_AudioCategory, sizeof (category), &category );
// Reactivate the current audio session
AudioSessionSetActive(YES);
// Do this, and fail with: AUIOClient_StartIO failed (2003329396)
[self createAUProcessingGraph];
[self initializeAndStartProcessingGraph];
// Do it a second time and it works
AudioSessionSetActive(NO);
AudioSessionSetActive(YES);
[self createAUProcessingGraph];
[self initializeAndStartProcessingGraph];
// Restore open al context
alcMakeContextCurrent([AudioDispatcher sharedInstance].audioContext);
// ''unpause'' my context
alcProcessContext([AudioDispatcher sharedInstance].audioContext);
}