2012-07-12 9 views
14

Ho un'app di allenamento che deve riprodurre l'audio. Io uso AVAudioPlayer per riprodurre il suono. Ma quando l'audio inizia a suonare, la musica di sottofondo da un'altra app (app di streaming radio) viene arrestata.iOS AVAudioPlayer interrompe la musica di sottofondo di un'altra app

Come posso fare in modo che non interrompa la musica di sottofondo? Perché mi piacerebbe che l'utente sentisse la musica mentre praticava.

Grazie.

+1

possibile duplicato del [iPhone AVAudioPlayer fermare la musica di sottofondo] (http://stackoverflow.com/questions/1672602/iphone-avaudioplayer-stopping-background-music) – benzado

+0

è necessario utilizzare un diverso tipo di sessione audio – bkbeachlabs

risposta

26

È possibile utilizzare il seguente codice in cui si utilizza AVAudioPlayer:

// Set AudioSession 
    NSError *sessionError = nil; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&sessionError]; 
    [[AVAudioSession sharedInstance] setActive:YES error:&sessionError]; 

Se si desidera impostare un delegato, è possibile aggiungere questa riga di codice:

[[AVAudioSession sharedInstance] setDelegate:self]; 
+0

È davvero necessario impostare il delegato. Dovrebbe essere sufficiente per impostare la categoria. –

+0

Ho testato il codice e solo una chiamata a setCategory è necessaria. Modificato di conseguenza il codice di esempio. –

+0

Quando l'audio di altre app viene riprodotto in background, la mia app si blocca con il motivo: 'condizione richiesta è falsa: _engine-> IsRunning()'. Questo ha risolto il problema. – vikzilla

5

in base alla risposta del SujithPt qui è la stessa cosa in rapida:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil) 
5

nel mio caso, ho voluto l'audio di sottofondo per essere giocato un volume più basso, poiché il suono riprodotto dalla mia app è più simile a un avviso. Io uso questo:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // prevents our app from stopping other audio, 
    // e.g. music, podcats, etc. that may be playing when launched 
    // our audio will be played at a higher volume 
    // and the background audio will "duck" until done 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryMultiRoute 
            withOptions:AVAudioSessionCategoryOptionDuckOthers 
              error:nil]; 
} 
1

Per Swift 2.2, aggiungere questo ovunque prima di giocare o preparetoplay:

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 
Problemi correlati