tiene - vibracion iphone 6
Cómo reproducir un sonido con AVAudioPlayer en modo silencioso en iPhone (5)
Quiero reproducir un sonido incluso en modo silencioso en iPhone.
Se puede hacer usando AVAudioPlayer (sin usar AVAudioSession)
(Para iOS 3.0+)
Gracias por adelantado.
Esto simplemente hará el truco (usando AVAudioSession
)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
Las respuestas anteriores son correctas. La siguiente es la versión Swift.
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
//print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
//print("AVAudioSession is Active")
} catch _ as NSError {
//print(error.localizedDescription)
}
} catch _ as NSError {
//print(error.localizedDescription)
}
Swift 4 versión simple:
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
En realidad, puedes hacer esto. Se controla a través de la Sesión de audio y no tiene nada que ver con AVAudioPlayer
. ¿Por qué no quieres usar AudioSession? Ellos juegan bien juntos ...
En su aplicación, debe inicializar la sesión de audio, y luego puede indicar qué tipo de audio desea reproducir. Si es un reproductor de música, entonces tiene sentido que el usuario quiera escuchar el audio incluso con el interruptor de timbre / silencio habilitado .
AudioSessionInitialize (NULL, NULL, NULL, NULL);
AudioSessionSetActive(true);
// Allow playback even if Ring/Silent switch is on mute
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory),&sessionCategory);
Tengo una aplicación en la que hago esto mismo, y uso AVAudioPlayer para reproducir audio, y con el interruptor de llamada / silencio habilitado, puedo escuchar el audio.
ACTUALIZACIÓN (11/6/2013)
En la aplicación que mencioné anteriormente, donde utilicé el código anterior con éxito, he estado utilizando (durante algún tiempo) el siguiente código para lograr el mismo resultado:
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *error = nil; BOOL result = NO; if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) { result = [audioSession setActive:YES withOptions:0 error:&error]; // iOS6+ } else { [audioSession setActive:YES withFlags:0 error:&error]; // iOS5 and below } if (!result && error) { // deal with the error } error = nil; result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error]; if (!result && error) { // deal with the error }
Pensé que publicaría esto como una alternativa, a la luz del comentario más reciente a esta respuesta. :-)
La solución de MarkGranoff es correcta. Sin embargo, si prefiere hacerlo en Obj-c en lugar de C, lo siguiente también funciona:
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];