Reproduza música em segundo plano usando o AVAudioplayer

Eu quero tocar música mesmo que o aplicativo esteja em segundo plano. Eu verifiquei todos os links stackoverflow, mas nenhum deles funcionou. Por favor, ajude a necessidade de fazê-lo hoje.

Eu usei o seguinte código:

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Day At The Beach" ofType: @"mp3"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; NSError *error; playerTemp = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; playerTemp.numberOfLoops = 0; AudioSessionSetActive(true); [playerTemp play]; 

Eu tinha resolvido esta questão, referindo-se a tarefas de fundo de aplicativos iOS

e faça algumas alterações no arquivo .plist do nosso aplicativo.

Atualizar

escrever este código na exibição do seu controlador fez método de carga como este

 - (void)viewDidLoad { NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"in-the-storm" ofType:@"mp3"]]; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [audioPlayer play]; [super viewDidLoad]; } 

Eu só queria adicionar uma nota à resposta de Mehul. Está linha:

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

é realmente muito importante. Eu usei outros tutoriais para colocar meu AVAudioPlayer em funcionamento. Tudo funcionou bem, exceto que meu áudio não iniciaria se o aplicativo estivesse em segundo plano. Para esclarecer, meu áudio estava bem se já estava sendo reproduzido quando o aplicativo entrou em segundo plano … mas não seria iniciado se o aplicativo já estivesse em segundo plano.

A adição da linha de código acima fez com que meu áudio fosse iniciado mesmo se o aplicativo estivesse em segundo plano.

Você precisa definir ‘audio’ como um dos seus UIBackgroundModes no Info.plist. A Apple tem documentação sobre o assunto .

Você pode usar o MPMoviePlayerController até mesmo para reproduzir filmes de áudio solo. Se você gostou, leia este detalhado Q & A técnico da Apple Library:

Biblioteca técnica do desenvolvedor do iOS Q & A QA1668

Passo 1

Faça as seguintes alterações no info.plist

  1. Aplicativo não é executado em segundo plano: NÃO

  2. Modos de fundo necessários

    item0 :App plays audio or streams audio/video using AirPlay

Etapa 2 Não esqueça de adicionar os seguintes itens no arquivo MainViewController.h

  1. #import <'AVFoundation/AVAudioPlayer.h>
  2. @interface MainViewController:<'AVAudioPlayerDelegate>

  3. AVAudioPlayer *H_audio_player;

Etapa 3 Adicione o seguinte código dentro da ação de reprodução da sua class MainViewController .

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d-%d",C_CID, C_SID] ofType:@"mp3"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; H_audio_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil]; H_audio_player.delegate = self; H_audio_player.numberOfLoops = -1; 

Escreva esta linha para plist para executar em segundo plano …

 UIBackgroundModes  audio  

Escreva este código onde você deseja usar

 AVAudioPlayer* audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:self.urlForConevW error:&error]; audioPlayer.delegate = self; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; audioPlayer.numberOfLoops = 1; [audioPlayer play]; 

Também é importante aqui se você estiver usando o MPMusicPlayerController : Você deve usar:

 [MPMusicPlayerController iPodMusicPlayer] 

E não

 [MPMusicPlayerController applicationMusicPlayer] 

Além disso, se você não quiser que seu aplicativo stop music que estava sendo reproduzida quando o aplicativo for iniciado, veja aqui: AVAudioPlayer desativa o iPod – como contornar o problema?

Eu uso o código abaixo. Funciona para mim e clica no botão de clique do método da instância do reprodutor de áudio.

 NSError *error; NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]]; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; [[AVAudioSession sharedInstance] setActive:YES error: &error]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self.player prepareToPlay]; 

De todas as respostas está faltando este código para controlar o jogador quando o usuário está acordando o dispositivo:

 - (BOOL)canBecomeFirstResponder { return YES; } - (void)remoteControlReceivedWithEvent:(UIEvent *)event { switch (event.subtype) { case UIEventSubtypeRemoteControlPlay: [_audioPlayer play]; break; case UIEventSubtypeRemoteControlPause: [_audioPlayer pause]; break; default: break; } } 

E você tem todas essas opções:

 UIEventSubtypeRemoteControlPlay = 100, UIEventSubtypeRemoteControlPause = 101, UIEventSubtypeRemoteControlStop = 102, UIEventSubtypeRemoteControlTogglePlayPause = 103, UIEventSubtypeRemoteControlNextTrack = 104, UIEventSubtypeRemoteControlPreviousTrack = 105, UIEventSubtypeRemoteControlBeginSeekingBackward = 106, UIEventSubtypeRemoteControlEndSeekingBackward = 107, UIEventSubtypeRemoteControlBeginSeekingForward = 108, UIEventSubtypeRemoteControlEndSeekingForward = 109, 

Se, mesmo depois de definir o áudio como um dos seus UIBackgroundModes no plist, o áudio parar ao ir para o fundo, tente setting application's audio session seu application's audio session para media playback .

Veja a referência relacionada: https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Introduction/Introduction.html

Aqui está como o código será:

 NSError *activationError = nil; [[AVAudioSession sharedInstance] setActive: YES error: &activationError]; NSError*setCategoryError = nil; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; 

Para reproduzir seu áudio em segundo plano

Passo 1: Basta adicionar o seu info.plist fazer um array insira a descrição da imagem aqui

passo 2 :

 - (void)applicationDidEnterBackground:(UIApplication *)application { __block UIBackgroundTaskIdentifier task = 0; task=[application beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"Expiration handler called %f",[application backgroundTimeRemaining]); [application endBackgroundTask:task]; task=UIBackgroundTaskInvalid; }]; } 

etapa 3 :

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"iNamokar" ofType:@"mp3"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath]; AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [player prepareToPlay]; [self.player play]; 

A partir do código de exemplo da Apple: Audio Mixer (MixerHost)

 // If using a nonmixable audio session category, as this app does, you must activate reception of // remote-control events to allow reactivation of the audio session when running in the background. // Also, to receive remote-control events, the app must be eligible to become the first responder. - (void) viewDidAppear: (BOOL) animated { [super viewDidAppear: animated]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; } 

Eu acho que os events de controle remoto não são necessários para o seguinte caso:

 AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);