IOS App不在后台运行

时间:2013-09-05 16:26:53

标签: iphone ios audio multitasking avaudiosession

我希望自己的应用音频能够在后台运行,而我已经关注了this tutorial,但它无效。当我按下主页按钮时,我的应用程序音频仍然停止,我意识到它没有调用“applicationDidBecomeActive”或“applicationDidEnterBackground”(即使我已禁用“应用程序不在后台运行”设置,问题仍然存在)。过去一周我一直在处理这件事。

到目前为止,我已经完成了这个步骤:

- 添加了AVFoundation框架并声明了

#import <AVFoundation/AVFoundation.h>

enter image description here

- 在音频中设置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中添加行

enter image description here

更新

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我建议您通过clicking here

阅读“Apple Human Interface”

在允许应用程序在后台工作的情况有限,例如(音频,下载,更新等),您可以在我提供给您的链接中找到它。

答案 2 :(得分: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];