0

我希望我的应用程序音频在后台运行,并且我已按照本教程进行操作,但它不起作用。当我按下主页按钮时,我的应用程序音频仍然停止,我意识到它没有调用“applicationDidBecomeActive”或“applicationDidEnterBackground”(即使我禁用了“应用程序不在后台运行”设置,问题仍然存在)。过去一周我一直在处理这个问题。

到目前为止,我已经完成了以下步骤:

-添加了 AVFoundation 框架并声明

#import <AVFoundation/AVFoundation.h>

在此处输入图像描述

- 在音频中设置 AVAudioSession

NSString *audioName = [NSString stringWithFormat:@"audio%d", (nimages)];
        NSString *soundPath =[[NSBundle mainBundle]pathForResource:audioName ofType:@"mp3"];
        NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
        NSError *error = nil;
        AVAudioPlayer *audio = nil;
        audio = [[AVAudioPlayer alloc]initWithContentsOfURL:soundURL error:&error];
        audio.numberOfLoops = -1;
        audio.volume = 0.9;
        if (error) {
            NSLog(@"%@", [error localizedDescription]);
            NSLog(@"Unable to load file");                
        }else {
            //Make sure the system follows our playback status
            [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
            [[AVAudioSession sharedInstance] setActive: YES error: nil];
            //Load the audio into memory
            [audio prepareToPlay];
        }

- 在 plist 中添加行

在此处输入图像描述

更新:

我的应用程序是一个音频应用程序,即使它进入后台,用户也可以播放我的应用程序的特定配乐。可能吗?

4

3 回答 3

0

我建议你点击这里阅读“Apple Human Interface”

在有限的情况下允许应用程序在后台运行,例如(音频、下载、更新..等),您可以在我提供给您的链接中找到所有内容。

于 2013-09-05T16:43:59.987 回答
0

使用它它将运行它的运行代码。

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/notification.wav", [[NSBundle mainBundle] resourcePath]]];

            NSError *error;

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

            AudioSessionInitialize( NULL, NULL, NULL,NULL);
            UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
            AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
            UInt32 value = YES;
            AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);
            AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(value), &value);
            [[AVAudioSession sharedInstance] setActive: YES error: nil];
            AudioSessionSetActive(true);



            // self.appAudioPlayer=audioPlayer;
             AVAudioPlayer  *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
            self.audioPlayerForPlay.delegate = self;
            self.audioPlayerForPlay.numberOfLoops=-1;
            [self.audioPlayerForPlay prepareToPlay];
            UInt32 doChangeDefaultRoute = 1;
            AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);





            self.audioPlayerForPlay = audioPlayer101;
            [audioPlayer101 release];
            [self.audioPlayerForPlay play];
于 2013-09-05T16:57:32.250 回答
0

我认为它必须积极播放音频才能正常工作。如果您的应用程序实际上不是音频应用程序,您可以尝试将应用程序设置为 VoIP;这不需要活动连接。它也不会阻止其他想要使用音频的应用程序。只需将后台模式设置为“应用程序提供IP语音服务”,然后它会在后台运行一次最多十分钟;如果你想让它保持活动状态或唤醒它,你可以连接一个 VoIP 套接字并将内容推送到它。

于 2013-09-05T16:42:17.673 回答