2010-09-18 18 views
43

Quiero hacer una aplicación que cree sonido, música o sonido del sistema cuando un iPhone está en modo silencioso. ¿Es posible reproducir cualquier tipo de sonido ya sea música o tonos del sistema cuando está en modo silencioso?Reproducir sonido en iPhone incluso en modo silencioso

+13

Si yo fuera el usuario, estaría avisó por ese "función" ... Después de todo, el usuario que pone el teléfono en modo silencioso probablemente espera que el teléfono permanezca en silencio. –

+2

Pensé que el propósito del modo silencioso era hacer que el teléfono se mantuviera ** silencioso **? –

+0

si hubo números importantes que necesitan ser recogidos, entonces es útil –

Respuesta

111

No es aconsejable, pero quién soy yo para decir que no puede hacerlo. Es posible que tenga una buena razón para reproducir el sonido.

Si está utilizando audio Sesiones, a continuación, incluir <AVFoundation/AVFoundation.h> al comienzo de su archivo y

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

debe hacer el truco. Tenga en cuenta que si reproduce música o sonidos, la reproducción del iPod se pausará.

Una vez que esto se ha hecho, probablemente en algún lugar en la inicialización de una de sus clases que reproduce los sonidos, se puede crear una instancia de sonidos como esto:

// probably an instance variable: AVAudioPlayer *player; 
NSString *path = [[NSBundle mainBundle] pathForResource...]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url]; 

Cuando se hace eso, se puede jugar con él en cualquier momento que quiera con:

[player play]; // Play the sound 
[player pause]; // Pause the sound halfway through playing 
player.currentTime += 10 // skip forward 10 seconds 
player.duration // Get the duration 

Y otras cosas agradables. Busque la referencia de clase AVAudioPlayer.

+0

¿Hay algún código para reproducir el sonido en modo silencioso? –

+7

Esta debería ser la respuesta aceptada. – Tyilo

+0

Hola chicos, primero gracias cool_me5000 por la respuesta.En mi caso, el sonido suena cuando la aplicación está en segundo plano (con el volumen al mínimo), pero si la aplicación está en primer plano (con el volumen al mínimo), el sonido no suena. Estoy probando en una generación de iPod touch 4 (lo dije porque no tiene interruptor silencioso). ¿Sabes qué puedo cambiar para lograr que la aplicación suene en ambas situaciones? – xarly

12

Sí, puede reproducir el sonido cuando el teléfono está configurado para vibrar. Simplemente use la clase AVAudioPlayer.

By default, playing an Audio Session sound will ~not~ respect the setting of the mute switch on the iPhone. In other words, if you make a call to play a sound and the silent (hardware) switch on the iPhone is set to silent, you’ll still hear the sound.

Esto es lo que desea. Entonces ahora sabes que al jugar una Sesión de Audio cuando tu teléfono está en modo silencioso seguirá reproduciendo el sonido, solo necesitas saber cómo crear una sesión de audio para reproducir el sonido, así: tomado de este sitio web: http://iosdevelopertips.com/audio/playing-short-sounds-audio-session-services.html

SystemSoundID soundID; 
NSString *path = [[NSBundle mainBundle] 
    pathForResource:@"RapidFire" ofType:@"wav"];  

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID); 
AudioServicesPlaySystemSound (soundID); 

Para que esto funcione, tendrá que importar el archivo de encabezado, y también agregar el AudioToolbox.framework a su proyecto.

Y eso es todo.

Por lo tanto, a partir de esta respuesta, ahora sabe que puede reproducir el sonido mientras el teléfono está en vibración. No necesita código adicional o especial para permitirle hacer esta funcionalidad como ya lo hace de manera predeterminada.

Pk

+1

Ya no funciona –

+2

No funciona en iOS9 – user2875404

+1

@ user2875404 no es broma. :) – Pavan

2

Sólo hay que poner esto en su viewDidLoad:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
         sizeof(sessionCategory), &sessionCategory); 
9

Obras en iOS 6 y anteriores

NSError *setCategoryErr = nil; 
NSError *activationErr = nil; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr]; 
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 
+0

en Swift 'hacer { intento AVAudioSession.sharedInstance(). SetCategory (AVAudioSessionCategoryPlayback) intento AVAudioSession.sharedInstance(). SetActive (verdadero) } catch deje de error como NSError {// informe de errores }' – Guy

1

Para reproducir un sonido en modo silencioso e incluso cuando se va a fondo, intente esto:

P ut este código en la aplicación: didFinishLaunchingWithOpitons:

[[AVAudioSession sharedInstance] setDelegate:self]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

y este código en applicationDidEnterBackground:

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

también configurar un modo de fondo de reproducir audio/Aire Play y AVFoundation incluir un encabezado.

7

Y para Swift 2 y Swift 3

do { 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     try AVAudioSession.sharedInstance().setActive(true) 
    } catch { 
     print(error) 
    } 
1

de Objective C, que puede reproducir sonido sistema con código siguiente:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
*The system path could be modified.* 
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf"; 
NSURL *url = [NSURL fileURLWithPath:path]; 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
[player play]; 
Cuestiones relacionadas