Воспроизведение музыки в фоновом режиме с помощью AVAudioplayer

Я хочу играть музыку, даже если приложение идет в фоновом режиме. Я проверил все ссылки на stackoverflow, но ни один из них не работал. Пожалуйста, помогите сделать это сегодня.

Я использовал следующий код:

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]; 

Я решил этот вопрос, обратившись к задачам IOS Application Background

и внесите некоторые изменения в файл .plist нашего приложения.

Обновить

напишите этот код в представлении вашего controllerа, выполнив такой способ загрузки

 - (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]; } 

Я просто хотел добавить примечание к ответу Мехула. Эта строка:

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

на самом деле очень важно. Я использовал другие уроки, чтобы запустить мой AVAudioPlayer. Все отлично работало, за исключением того, что мой звук не начинался, если приложение было в фоновом режиме. Чтобы уточнить, мой звук был в порядке, если он уже играл, когда приложение зашло в фоновый режим … но он не запустится, если приложение уже было в фоновом режиме.

Добавление вышеприведенной строки кода привело к тому, что мой звук начнется, даже если приложение было в фоновом режиме.

Вам нужно установить «audio» как один из ваших UIBackgroundModes в Info.plist. У Apple есть документация по этой проблеме .

Вы можете использовать MPMoviePlayerController даже для воспроизведения соло-аудио-фильмов. Если вам это нравится, прочитайте эту подробную техническую информацию о библиотеке Apple Library:

Библиотека разработчика iOS Технические вопросы QA1668

Шаг 1

Внесите следующие изменения в info.plist

  1. Приложение не работает в фоновом режиме: НЕТ

  2. Требуемые фоновые режимы

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

Шаг 2 Не забудьте добавить следующие вещи в файл MainViewController.h

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

  3. AVAudioPlayer *H_audio_player;

Шаг 3 Добавьте следующий код внутри действия воспроизведения вашего 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; 

Запишите эту строку в plist для запуска фона …

 UIBackgroundModes  audio  

Напишите этот код Где вы хотите использовать

 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]; 

Также важно здесь, если вы используете MPMusicPlayerController : вы должны использовать:

 [MPMusicPlayerController iPodMusicPlayer] 

И не

 [MPMusicPlayerController applicationMusicPlayer] 

Также, если вы не хотите, чтобы ваше приложение stop music которая воспроизводилась при запуске вашего приложения, смотрите здесь: AVAudioPlayer отключает iPod – как работать?

Я использую приведенный ниже код. Он работает для меня и вызывает щелчок на кнопке метода экземпляра аудиоплеера.

 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]; 

Из всех ответов отсутствует этот код для управления проигрывателем, когда пользователь пробуждает устройство:

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

И у вас есть все эти возможности:

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

Если даже после установки звука как одного из ваших UIBackgroundModes в UIBackgroundModes звук останавливается при переходе на задний план, попробуйте setting application's audio session media playback .

Вот ссылка: https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Introduction/Introduction.html

Вот о чем будет выглядеть код:

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

Воспроизведение аудио в фоновом режиме

Шаг 1. Просто добавьте в свой info.plist массив. введите описание изображения здесь

шаг 2 :

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

шаг 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]; 

Из примера кода 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]; } 

Я думаю, что события дистанционного управления не нужны для следующего случая:

 AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value); 
  • Как распределить приложение ios без проводов без управления UDID и перекомпиляции
  • Класс Foo реализован как в MyApp, так и в MyAppTestCase. Один из двух будет использован. Какой из них не определен
  • Должен ли я использовать NSUserDefaults или plist для хранения данных?
  • всплывающее меню iPhone, как iPad popover?
  • Как я могу программно приостановить NSTimer?
  • Как анализировать длительность ISO-8601 в Objective C?
  • Программно включить Bluetooth в iphone sdk?
  • С ARC, что лучше: alloc или autorelease инициализаторы?
  • UISlider вместе с ProgressView
  • Могу ли я получить доступ к брелкам на iPhone?
  • Как я могу «разрезать» прозрачное отверстие в UIImage?
  • Interesting Posts

    Шифрование базы данных Android

    Когда вы можете опустить расширение файла в директиве #include?

    Выберите несколько строк в UITableview

    Тайм-аут аутентификации форм против сеанса

    Ошибка Android MediaPlayer (1, -2147483648)

    Почему Enumerable.All возвращает true для пустой последовательности?

    Возможно ли создать навигационное приложение «Пошаговый поворот» на Android с помощью Google Maps?

    Как установить Java SDK на CentOS?

    Как обрабатывать всплывающее окно аутентификации с помощью Selenium WebDriver с помощью Java

    Маршрутизатор Angular2, получить данные маршрута с URL-адреса, отобразить панировочные сухари

    У MATLAB заканчивается память, но это не должно быть

    Возможно ли изменить мой MAC-адрес?

    Обновление с Windows 7 Home Premium до профессионала

    Как инвертировать цвета конкретного приложения или окна, используя лупу

    Рекомендации по попытке получить данные с жесткого диска, помещая их в морозильник

    Давайте будем гением компьютера.