IOS: playing sound in the background

I am working on a small application where I want the phone to play an audio file in an event from my location controller. The problem is that the application is in the background, AVAudioPlayer does not start the audio file, but the code is scheduled and it gets the NSLog output. Another thing is that it works in the simulator, but not on the phone.

Why not?

This is my code to play the file:

- (void)tryPlayTaleSound:(NSString*)fileName { NSString *backgroundMusicPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"mp3"]; NSURL *backgroundMusicURL = [NSURL fileURLWithPath:backgroundMusicPath]; NSError *error; backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error]; // Check to see if iPod music is already playing //UInt32 propertySize = sizeof(otherMusicIsPlaying); //AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &otherMusicIsPlaying); // Play the music if no other music is playing and we aren't playing already //if (otherMusicIsPlaying != 1 && !backgroundMusicPlaying) { //[backgroundMusicPlayer prepareToPlay]; [backgroundMusicPlayer play]; backgroundMusicPlaying = YES; //} NSLog(@"%s - ", __FUNCTION__); } 

In Im magazine getting it.

 Apr 26 13:57:48 iPhone CommCenter[58] <Notice>: Client [com.apple.persistentconnection[dataaccessd,85]] is telling PDP context 0 to go active. Apr 26 13:57:50 iPhone Herning100[1467] <Warning>: Playing audiofile - filename is Fil03 Apr 26 13:57:50 iPhone mediaserverd[39] <Warning>: 13:57:50.653 <AudioControl> WARNING translating CMSession error: -12985 Apr 26 13:57:50 iPhone mediaserverd[39] <Warning>: 13:57:50.656 <AudioControl> WARNING translating CMSession error: -12985 Apr 26 13:57:50 IPhone mediaserverd[39] <Error>: 13:57:50.734 <AudioControl> AudioQueue: Error -12985 from AudioSessionSetClientPlayState(1467) Apr 26 13:57:50 iPhone Herning100[1467] <Warning>: -[AppDelegate tryPlayTaleSound:] - Apr 26 13:57:50 iPhone com.apple.debugserver-199[1465] <Warning>: 9 +28.832083 sec [05b9/0303]: error: ::mach_vm_region_recurse ( task = 0x1603, address => 0xfffffffe, size => 0, nesting_depth => 1024, info => 0x2fd7fe48, infoCnt => 12) addr = 0xfffffffe err = (os/kern) invalid address (0x00000001) Apr 26 13:57:51 iPhone com.apple.debugserver-199[1465] <Warning>: 10 +0.187961 sec [05b9/0303]: error: ::mach_vm_region_recurse ( task = 0x1603, address => 0xfffffffe, size => 0, nesting_depth => 1024, info => 0x2fd7fe48, infoCnt => 12) addr = 0xfffffffe err = (os/kern) invalid address (0x00000001) 

Is there any difference if I use AVAudioPlayer or AVAudioSession.?

Hope someone can help.

/ Lasse

+6
source share
3 answers

In addition to the background audio mode in your Info.plist you need to set the general audio session to the correct mode for your application and activate it immediately before playing sound in the background:

 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *error = nil; NSLog(@"Activating audio session"); if (![audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error]) { NSLog(@"Unable to set audio session category: %@", error); } BOOL result = [audioSession setActive:YES error:&error]; if (!result) { NSLog(@"Error activating audio session: %@", error); } [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

Remember to turn off the audio session when you finish playing sounds:

 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *error = nil; NSLog(@"Deactivating audio session"); BOOL result = [audioSession setActive:NO error:&error]; if (!result) { NSLog(@"Error deactivating audio session: %@", error); } 
+9
source

In iOS, only some applications can run in the background. One of them is an application for an audio player, but for them you need to set the โ€œrequired background modesโ€ with โ€œaudioโ€ (the application can play audio) in your Info.plist.

And yes, if you can get the location in the background, you have to install this key in your Plist. Add also sound resolution to plist.

0
source

Before playing sound in the background, set the background job. It seems that iOS refuses to start sound in the background if the remaining background time is less than 10 seconds.

0
source

Source: https://habr.com/ru/post/943688/


All Articles