No se puede controlar el altavoz en el iPad.

He seguido el método que se ocupa del estado de mi altavoz:

AudioSession.h

enum { kAudioSessionOverrideAudioRoute_None = 0, kAudioSessionOverrideAudioRoute_Speaker = 'spkr' }; 

Mi class

 @synthesize speakerEnabled; ... - (void)setSpeakerEnabled:(BOOL)enable { speakerEnabled = enable; if(enable) { UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute , sizeof (audioRouteOverride) , &audioRouteOverride); } else { UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute , sizeof (audioRouteOverride) , &audioRouteOverride); } } 

Sin embargo, solo funciona en iPhone , para iPad: no pasa nada.

  • Cuando AudioSessionSetProperty el button: Speaker On , ingreso a if(enable) y AudioSessionSetProperty recibe kAudioSessionOverrideAudioRoute_Speaker ;

  • Cuando AudioSessionSetProperty el button: Speaker Off , ingreso a else y AudioSessionSetProperty recibe kAudioSessionOverrideAudioRoute_None ;

Comencé a depurar y no encontré diferencia entre dispositivos.

Tengo iPad2 iOS 6.1.

¿Me he perdido algo?

por favor, ayúdame

Editar

Como LombaX dice que agregué en la categoría AVAudioSession aplicación de lanzamiento:

 NSError *err = nil; BOOL success = [[AVAudioSession shanetworkingInstance] setCategory:AVAudioSessionCategoryPlayback error:&err]; if(!success){ [MyLogger logc:MyLoggerLog format:"%@",[err localizedDescription]]; } 

success = YES

Todavía no funciona.

Creo que no entiendes el uso de esta propiedad. Espera habilitar / deshabilitar su altavoz. Esa no es la intención de kAudioSessionProperty_OverrideAudioRoute . Más bien, afecta el routing del sonido de salida, de una manera bastante limitada.

Estas son las diversas routes de salida posibles disponibles para el iPhone.

 extern const CFStringRef kAudioSessionOutputRoute_LineOut extern const CFStringRef kAudioSessionOutputRoute_Headphones extern const CFStringRef kAudioSessionOutputRoute_BluetoothHFP extern const CFStringRef kAudioSessionOutputRoute_BluetoothA2DP extern const CFStringRef kAudioSessionOutputRoute_BuiltInReceiver extern const CFStringRef kAudioSessionOutputRoute_BuiltInSpeaker extern const CFStringRef kAudioSessionOutputRoute_USBAudio extern const CFStringRef kAudioSessionOutputRoute_HDMI extern const CFStringRef kAudioSessionOutputRoute_AirPlay 

Estas son solo routes posibles : lo que está realmente disponible depende del context. Apple restringe severamente tu capacidad para determinar estas routes en la aplicación, ya que es algo que el usuario necesita controlar de manera consistente con el dispositivo. La mayoría de ellos están determinados implícitamente por el usuario que enchufa / desconecta el hardware (auriculares, USB, HDMI, salida de línea), y Apple no quiere que su aplicación interfiera con las expectativas de los usuarios aquí.

La routeButton MPVolumeView puede seleccionarse utilizando MPVolumeView de routeButton si el context de los medios es correcto (y la reproducción de air está disponible). Bluetooth puede ser guiado por OverrideCategoryEnableBluetoothInput ( que controla tanto la input como la salida )

En particular, tenga en count que kAudioSessionOutputRoute_BuiltInReceiver es el altavoz de bajo nivel en el iPhone que tiene en la oreja cuando realiza una llamada telefónica. Esta es la ruta de salida de audio pnetworkingeterminada para el iPhone si un dispositivo externo (por ejemplo, auriculares) no está conectado. kAudioSessionOutputRoute_BuiltInSpeaker es el altavoz más fuerte 'manos libres' en la parte inferior del teléfono.

Puede networkingirigir cualquier valor pnetworkingeterminado actual a este BuiltInSpeaker estableciendo una de estas properties de anulación:

 key: kAudioSessionProperty_OverrideAudioRoute values: kAudioSessionOverrideAudioRoute_Speaker : kAudioSessionOverrideAudioRoute_None 

Especifica si se debe anular o no la ruta de audio normal de la categoría de session de audio.

 key: kAudioSessionProperty_OverrideCategoryDefaultToSpeaker values: TRUE : FALSE 

Especifica si se debe enrutar o no el audio al altavoz (en lugar de al receptor) cuando no se conecta otra ruta de audio, como auriculares.

Ambos están diseñados para ser utilizados con la categoría de session de audio kAudioSessionCategory_PlayAndRecord .

Tenga en count que, en ambos casos, no está eligiendo entre ninguna ruta de salida, solo está reemplazando la "ruta pnetworkingeterminada" en favor del altavoz incorporado (ruidoso).

El iPad, que carece de un teléfono, no tiene un tipo de altavoz BuiltInReceiver . Es la ruta pnetworkingeterminada, en ausencia de gadgets conectados o juegos, es el mismo BuiltInSpeaker . Por lo tanto, anular no tiene ningún efecto.

Suponiendo que realmente estás tratando de silenciar el audio en tu aplicación, cómo lo logras depende de muchos otros aspectos del layout de tu aplicación. Si desea silenciar el dispositivo , Apple prefiere que el usuario lo controle mediante el interruptor de timbre / silencio. Parece que no lo harían de otra manera:

He recibido una respuesta de Apple sobre esto. Han dicho que no tienen y nunca han proporcionado un método para detectar el interruptor de silenciamiento de hardware y no tienen la intención de hacerlo. https://stackoverflow.com/a/8009073/1375695

" La configuration de los altavoces es una sobrecarga para el dispositivo, no para un sonido dado "
http://lists.apple.com/archives/coreaudio-api/2009/Mar/msg00300.html

¿Has intentado configurar la categoría de audio antes de jugar? Recuerdo que tuve el mismo problema hace un time y encontré esta solución (ajuste la categoría)

 [[AVAudioSession shanetworkingInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

No encontré nada en la documentation, creo que en el iPad debes configurar la categoría porque el iPhone y el iPad difieren sobre un detalle: en el iPhone, el interruptor de hardware izquierdo puede silenciar el altavoz. En iPad, se usa el mismo interruptor para bloquear la rotation.

Prueba y avísame

EDITAR:

Enlace útil:

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Cookbook/Cookbook.html